在Windows手机中动态创建多个矩形

时间:2014-11-07 20:53:41

标签: c# dynamic windows-phone-8.1 multiple-instances rectangles

我创建了一个画布,我想让用户在屏幕上创建矩形,然后用户应该可以操作它。

我写了以下代码 -

    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)。

现在我的问题是这个代码对于一个矩形工作正常,但我想使用一个选项来添加另一个或多个矩形。

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您只需要从事件处理程序中的“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;

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

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