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