如何从DataTemplate和ControlTemplate中获取控件?想得太多了



当我在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

最后,如果您可以通过使用数据绑定或事件冒泡来避免这样做,那么就这样做吧!这要容易得多。

最新更新