2009-10-05 100 views
7

我有一个用户控件,将样式应用于按钮,样式包含ControlTemplate部分。在ControlTemplate中,有各种UI元素,例如Ellipse和Path。WPF从代码后面设置命名样式元素?

如果我给这些元素 - 椭圆和路径 - 带有x:Name的名称,我可以从后面的代码访问它们吗?

它似乎风格的椭圆和路径不可见,因为我得到一个编译错误(C#)。

我该怎么做呢?

回答

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); 

你可以阅读有关FrameworkTemplate.FindName

一些示例和讨论here,herehere

+0

完美,非常感谢! – MattJ 2009-10-05 19:44:18

+11

如果它是完美的,那么将其标记为答案。 – Vaccano 2009-12-28 20:37:35