在windowsphone中动态创建多个矩形

本文关键字:创建 windowsphone 动态 | 更新日期: 2023-09-27 18:29:41

我已经创建了一个画布,我想让用户在屏幕上创建矩形/s,然后用户应该能够操作它。

我已经写了以下代码-

    private TranslateTransform move = new TranslateTransform();
    private ScaleTransform resize = new ScaleTransform();
    private TransformGroup rectangleTransforms = new TransformGroup();
    private Brush stationaryBrush;
    private Brush transformingBrush = new SolidColorBrush(Colors.Orange);
private void Button_Click(object sender, RoutedEventArgs e)
    {
        rect = new Rectangle();
        rect.Height = 100;
        rect.Width = 100;
        SolidColorBrush myBrush = new SolidColorBrush(Colors.Orange);
        rect.Fill = myBrush;
        LayoutRoot.Children.Add(rect);
        rectangleTransforms.Children.Add(move);
        rectangleTransforms.Children.Add(resize);
        rect.RenderTransform = rectangleTransforms;
        // Handle manipulation events.
        rect.ManipulationStarted +=
            new EventHandler<ManipulationStartedEventArgs>(Rectangle_ManipulationStarted);
        rect.ManipulationDelta +=
            new EventHandler<ManipulationDeltaEventArgs>(Rectangle_ManipulationDelta);
        rect.ManipulationCompleted +=
            new EventHandler<ManipulationCompletedEventArgs>(Rectangle_ManipulationCompleted);
    }
    void Rectangle_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
    {
        rect.Fill = stationaryBrush;
    }
    void Rectangle_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
        stationaryBrush = rect.Fill;
        rect.Fill = transformingBrush;
    }
    void Rectangle_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
    {
        move.X += e.DeltaManipulation.Translation.X;
        move.Y += e.DeltaManipulation.Translation.Y;
        if (e.DeltaManipulation.Scale.X > 0 && e.DeltaManipulation.Scale.Y > 0)
        {
            resize.ScaleX *= e.DeltaManipulation.Scale.X;
            resize.ScaleY *= e.DeltaManipulation.Scale.Y;
        }
    }

我从MSDN Library复制了这段代码。我在上面声明了一个矩形对象(rect)。

现在我的问题是,这段代码对一个矩形运行良好,但我想给use一个添加另一个或多个矩形的选项。

1.是否可以用相同的按钮点击事件创建多个矩形,并让用户操作每个矩形创建或其他事情,他可以在创建后至少调整一次矩形,而不是之后。

感谢您的帮助。

在windowsphone中动态创建多个矩形

您只需要从事件处理程序中的"sender"获取Rectangle实例,而不需要存储本地副本:

void Rectangle_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
    var rect = (Rectangle)sender;
    rect.Fill = stationaryBrush;
}

这同样适用于"移动"——不使用本地变量,而是在每个按钮点击事件中创建一个新实例:

var rectangleTransform = new TransformGroup();
rectangleTransforms.Children.Add(new TranslateTransform());
rectangleTransforms.Children.Add(new ScaleTransform());
rect.RenderTransform = rectangleTransforms;

您可以在"ManipulationDelta"处理程序中通过将RenderTransform属性强制转换回TransformGroup类型来检索它:

void Rectangle_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    var rect = (Rectangle)sender;
    var move = (TransformGroup)rect.RenderTransform;
    // etc