8

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

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

看起来样式的椭圆和路径不可见,因为我收到编译错误(C#)。

我会以错误的方式解决这个问题吗?

4

1 回答 1

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.

一些例子和讨论hereherehere

于 2009-10-05T19:40:13.493 回答