【发布时间】:2010-08-10 15:27:50
【问题描述】:
即使在 SO 上已有一些相关问题,我也无法找到以下问题的干净解决方案。
如果我有一个多次使用的数据模板,例如 TreeViewItem.HeaderTemplate,我该如何更改模板仅用于某些 TreeViewItem。
例如,假设我的 TVI HeaderTemplate 有一个文本块,根据字符串,我想将 fontweight 设为粗体。
我想做这样的事情:
((TextBlock)myTreeView.Items.ElementAt(0).FindName("myTextBlock")).FontWeight = FontWeights.Bold;
有人对此有解决方案吗? --> 谢谢埃文
编辑:有没有办法编写一个通用函数来根据它的名称获取控件,即使它在数据模板中?
LayoutRoot.FindName("myTextBlock"); 如果 myTextBlock 不在数据模板中,则可以使用。如何编写findElementInDataTemplate(string elementName, string parentName) 函数?
埃文的答案不是我想要的原因是因为我正在开发一个控件。我希望使用我的控件的应用程序开发人员能够更改控件中的任何元素。如果我使用 Evan 的解决方案,那将要求应用程序开发人员能够访问控件中的所有模板。可能,但并不理想。谢谢!
【问题讨论】:
-
如果您多次使用了包含名为“myTextBlock”的控件的 DataTemplate,然后进行了某种
LayoutRoot.FindName("myTextBlock")操作,那么您希望该操作在众多名为“myTextBlock”的控件中的哪一个返回? -
@AnthonyWJones 好点,已编辑以包含 parentName 参数。
-
@AnthonyWJones:通常两个具有名称的控件是不可能的。如果您在模板中保留两个同名控件,则模板被认为是错误的。
标签: c# silverlight silverlight-3.0 datatemplate