当我在DataTemplate中定义一个控件时,如何获得该控件的引用?
如果控件在ControlTemplate中的样式,如何获取?
您应该告诉我们为什么需要引用模板中的控件。
考虑到控件将被多次渲染,因此获取单个引用根本没有任何意义。
最常见的方法是通过x:Name="MyElementName"
"命名"要定位的元素,然后可以使用FindName方法来定位names元素。如果在ItemsControl
中使用DataTemplate
来呈现yoru XAML标记的多个副本,那么显然会有许多元素共享相同的名称。因此,存在一个称为XAML名称范围的概念,您应该阅读该概念以了解您提供的名称的范围。
如果你需要一种更通用的方法来搜索可视化树中的元素,请尝试Linq到VisualTree,你可以用它来查询你的UI,例如:
var itemsFluent = this.Descendants<TextBox>()
.Where(i => i.Ancestors().FirstOrDefault() is Grid);
上述查询将查找具有Grid
作为直接父级的所有TextBoxs
。
最后,如果您可以通过使用数据绑定或事件冒泡来避免这样做,那么就这样做吧!这要容易得多。