Когда вы присваиваете имя элементу управления с атрибутом Name
, он генерирует члена в классе, поэтому вы сможете получить к ним доступ по имени:
private void parentCanvas_MouseLeave(object sender, MouseEventArgs e)
{
Canvas c = parentCanvas;
c.Background = Brushes.Blue;
Border b = border1;
}
Если элементы управления являются частьюControlTemplate или DataTemplate, тогда вам нужно будет получить ссылку на родительский элемент и найти его в шаблоне.Например, если ваш XAML является частью DataTemplate, вам нужно будет сделать что-то вроде этого:
private void parentCanvas_MouseLeave(object sender, MouseEventArgs e)
{
Canvas c = (Canvas)sender;
var contentPresenter = (ContentPresenter)c.TemplatedParent;
var b = contentPresenter.ContentTemplate.FindName(
"border1", contentPresenter);
}
В любом случае приведение параметра sender
к соответствующему типу вполне разумно, и этопозволяет вам сделать ваши обработчики событий более пригодными для повторного использования.
Если у вас нет имени для вашего холста, вы также можете использовать свойство Children Canvas для итерации по его визуальным дочерним элементам:
private void parentCanvas_MouseLeave(object sender, MouseEventArgs e)
{
Canvas c = (Canvas)sender;
var firstChild = c.Children[0];
var firstBorderChild = c.Children.OfType<Border>().FirstOrDefault();
}
Наконец, если у вас есть изображение, которое не является Panel, вы можете использовать VisualTreeHelper.GetChildrenCount и VisualTreeHelper.GetChild :
for (int childIndex = 0;
childIndex < VisualTreeHelper.GetChildrenCount(c);
childIndex++)
{
var child = VisualTreeHelper.GetChild(c, childIndex);
}