即使在SO上已经有几个相关的问题,我仍然无法找到以下问题的干净解决方案。访问Silverlight DataTemplate中的元素
如果我有一个多次使用的数据模板,例如TreeViewItem.HeaderTemplate,我如何才能更改某些TreeViewItems的模板。
例如,假设我的TVI HeaderTemplate有一个文本块,并且取决于字符串,我想使得这个文本的粗体。
我想要做这样的事情:
((TextBlock)myTreeView.Items.ElementAt(0).FindName("myTextBlock")).FontWeight = FontWeights.Bold;
有没有人有一个解决方案? - >谢谢埃文
编辑:有没有办法编写一个通用函数来获取控件的基础上,即使它是在一个数据模板的名称?
LayoutRoot.FindName("myTextBlock");
将工作,如果myTextBlock不在数据模板中。我怎么写一个findElementInDataTemplate(string elementName, string parentName)
函数?
Evan的答案不是我正在寻找的原因是因为我正在开发一个控件。我希望使用我的控件的应用程序开发人员能够更改控件中的任何元素。如果我使用Evan的解决方案,则需要应用程序开发人员访问控件中的所有模板。可能,但不理想。谢谢!
如果您使用的是含有一种叫“myTextBlock”多次,然后控制一个DataTemplate(你正在寻找的元素的父)有某种LayoutRoot.FindName的'( “myTextBlock”)'操作,那么称为“myTextBlock”的许多控件中的哪一个会让该操作返回? – AnthonyWJones 2010-08-10 16:54:11
@AnthonyWJones好点,编辑后包含一个parentName参数。 – NickHalden 2010-08-10 17:04:59
@AnthonyWJones:通常情况下,名称的两个控件是不可能的。如果您在模板中保留两个相同的名称控件,则模板被认为是错误的。 – Mahantesh 2012-02-06 10:52:18