2015-04-16 3 views
0

У меня есть холст WPF, программно с серией прямоугольников (скажем, 100, но число меняется каждый раз). Моя проблема в том, что мне нужно определить, какой прямоугольник щелкнул пользователь. Я думал присвоить каждому прямоугольнику другое уникальное имя и одно и то же событие «MouseLeftButtonDown» для каждого прямоугольника, но тогда я не знаю, как получить имя объекта, который был нажат. Может ли кто-нибудь мне помочь? Существует также возможность проверить, в какой точке экрана щелкнула мышь, получить координаты, а затем вычислить, какой прямоугольник вокруг этой точки, но это кажется слишком сложным для такой глупой проблемы. Спасибо заранее!Определить, какой прямоугольник был нажат в Canvas WPF

+0

попробовать размещать код, какие вы пытались, где вы застряли :) –

+0

Смотрите: http://stackoverflow.com/questions/1068979/wpf-rectangle-does-not-have-a-click-event – goobering

+0

* Я не знаю, как я могу получить Имя объекта, на который был нажат. * --- В 'MouseB 'есть' отправитель' uttonEventHandler' – Bolu

ответ

0

Вы можете получить прямоугольник по имени, как это, если все прямоугольники ограничены в OnMouseDownEvent к Rectangle_OnMouseDown Функция:

private void Rectangle_OnMouseDown(object sender, MouseButtonEventArgs e) 
    { 
     var mouseWasDownOn = e.Source as FrameworkElement; 
     if (mouseWasDownOn != null) 
     { 
      string elementName = mouseWasDownOn.Name; 
      var myRectangle = (Rectangle)this.FindName(elementName); 
     } 
    } 
0

Попробуйте использовать canavas событий:

private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     if (e.OriginalSource is Rectangle) 
     { 
     Rectangle ClickedRectangle = (Rectangle)e.OriginalSource; 

     // Your work here I give y some actions ... 
     ClickedRectangle.Opacity = 0.5; 
     if (e.ClickCount == 2) 
     { 
      canvas.Children.Remove(ClickedRectangle); 
     } 
     else 
     { 
      isPressed = true; 
      startPosition = e.GetPosition(canvas); 
      ClickedRectangle.CaptureMouse(); 
     } 
     } 
    } 
Смежные вопросы