0

Я создал холст, и я хочу, чтобы пользователь создал прямоугольник на экране, а затем пользователь должен иметь возможность манипулировать им.динамически создавать несколько прямоугольников в телефоне Windows

Я написал следующий код -

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. Я объявил объект прямоугольника (rect) выше.

Теперь моя проблема в том, что этот код отлично работает для одного прямоугольника, но я хочу дать возможность добавить другой или несколько прямоугольников.

1.может создать несколько прямоугольников с одним и тем же событием нажатия кнопки и позволить пользователю манипулировать каждым созданием прямоугольника или что-то там, где он может отрегулировать прямоугольник по крайней мере один раз после его создания, а не после.

Любая помощь приветствуется.

ответ

0

Вы бы просто получить экземпляр 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