我有一个将样式应用于按钮的用户控件,该样式包含 ControlTemplate 部分。在 ControlTemplate 中,有各种 UI 元素,例如 Ellipse 和 Path。
如果我给这些元素——椭圆和路径——一个带有 x:Name 的名称,我可以从后面的代码中访问它们吗?
看起来样式的椭圆和路径不可见,因为我收到编译错误(C#)。
我会以错误的方式解决这个问题吗?
我有一个将样式应用于按钮的用户控件,该样式包含 ControlTemplate 部分。在 ControlTemplate 中,有各种 UI 元素,例如 Ellipse 和 Path。
如果我给这些元素——椭圆和路径——一个带有 x:Name 的名称,我可以从后面的代码中访问它们吗?
看起来样式的椭圆和路径不可见,因为我收到编译错误(C#)。
我会以错误的方式解决这个问题吗?
因为一个模板可以被实例化多次,所以不可能通过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
.