WPF从代码后面设置命名样式元素?

Mat*_*ttJ 7 wpf styles controltemplate

我有一个用户控件,它将样式应用于按钮,样式包含ControlTemplate部分.在ControlTemplate中,有各种UI元素,如Ellipse和Path.

如果我给这些元素 - Ellipse和Path - 一个带x:Name的名称,我可以从后面的代码中访问它们吗?

看起来样式的Ellipse和Path是不可见的,因为我收到编译错误(C#).

我是以错误的方式来做这件事的吗?

Dre*_*kes 18

由于模板可以多次实例化,因此无法通过绑定生成的成员x:Name.相反,您必须在应用于控件的模板中找到命名元素.

给出简化的XAML:

<ControlTemplate x:Key="MyTemplate">
    <Ellipse x:Name="MyEllipse" />
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

你会做这样的事情:

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

template.FindName("MyEllipse", myControl);
Run Code Online (Sandbox Code Playgroud)

甚至更简单:

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl);
Run Code Online (Sandbox Code Playgroud)

你可以阅读FrameworkTemplate.FindName.

一些例子和讨论这里,这里这里.

  • 如果它是完美的,那么将其标记为答案. (11认同)