WPF установить именованные элементы стиля из кода позади? - PullRequest
7 голосов
/ 05 октября 2009

У меня есть пользовательский элемент управления, который применяет стиль к кнопке со стилем, содержащим раздел ControlTemplate. В ControlTemplate есть различные элементы пользовательского интерфейса, такие как Ellipse и Path.

Если я назначу этим элементам - эллипсу и пути - имя с x: Name, могу ли я получить к ним доступ из кода позади?

Похоже, что Ellipse и Path стиля не видны, потому что я получаю ошибку компиляции (C #).

Я поступаю неправильно?

1 Ответ

18 голосов
/ 05 октября 2009

Поскольку шаблон может быть создан несколько раз, невозможно связать сгенерированный элемент с помощью x:Name. Вместо этого вы должны найти именованный элемент в шаблоне, примененном к элементу управления.

Учитывая упрощенный XAML:

<ControlTemplate x:Key="MyTemplate">
    <Ellipse x:Name="MyEllipse" />
</ControlTemplate>

Вы бы сделали что-то вроде этого:

var template = (ControlTemplate)FindResource("MyTemplate");

template.FindName("MyEllipse", myControl);

Или еще проще:

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl);

Вы можете прочитать о FrameworkTemplate.FindName.

Некоторые примеры и обсуждение здесь , здесь и здесь .

...