如何从DataTemplate和ControlTemplate获取控件?这么想

时间:2012-01-09 06:08:48

标签: xaml windows-phone-7

当我在DataTemplate中定义一个控件时,如何获取该控件的引用?

如果控件在ControlTemplate中,如何获取?

2 个答案:

答案 0 :(得分:0)

您应该告诉我们为什么需要在模板中引用控件。

考虑控件将被多次渲染,因此获得单个引用确实没有任何意义。

答案 1 :(得分:0)

最常见的方法是命名'您希望通过x:Name="MyElementName"找到的元素,然后可以使用FindName方法找到names元素。如果在DataTemplate中使用ItemsControl来呈现yoru XAML标记的多个副本,那么显然会有许多共享同一名称的元素。出于这个原因,有一个称为XAML namescope的概念,您应该阅读此内容以了解您提供的名称的范围。

如果您需要更通用的方法来搜索可视化树中的元素,请尝试Linq-to-VisualTree,您可以使用它来查询UI,例如:

var itemsFluent = this.Descendants<TextBox>()
                      .Where(i => i.Ancestors().FirstOrDefault() is Grid);

上述查询会找到所有TextBoxs作为直接父级的Grid

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