当前位置: 首页 > 编程语言 > C#

SilverlightDataTemplate中的访问元素分享

时间:2023-04-10 11:33:13 C#

SilverlightDataTemplate中的访问元素尽管SO上已经有一些相关的问题,但我找不到以下问题的干净解决方案。如果我有一个多次使用的数据模板,比如TreeViewItem.HeaderTemplate,我该如何改变一些TreeViewItem的模板。例如,假设我的TVIHeaderTemplate有一个文本块,基于一个字符串,我想将字体设为粗体。我想做这样的事情:((TextBlock)myTreeView.Items.ElementAt(0).FindName("myTextBlock")).FontWeight=FontWeights.Bold;有没有人有办法解决吗?->谢谢Evan编辑:有没有一种方法可以编写一个通用函数来根据它的名称获取控件,即使它在数据模板中也是如此?LayoutRoot.FindName("myTextBlock");如果myTextBlock不在数据模板中,将起作用。如何编写findElementInDataTemplate(stringelementName,stringparentName)函数?埃文的答案不是我要找的原因是因为我正在开发一个控件。我希望使用我的控件的应用程序开发人员能够更改控件中的任何元素。如果我使用Evan的解决方案,我需要应用程序开发人员能够访问控件中的所有模板。可能,但并不理想。谢谢!这是什么版本的silverlight?这篇来自“8月10日18:55”的帖子是哪一年的?它似乎不存在于当前版本的SL4中。我完成此操作的一种方法是使用控件的Loaded事件将我需要的所有项目存储在类级别集合变量中。以这个DataTemplate为例。...然后使用Loaded事件加载某种集合供以后使用。私有列表templateTextBlocks=newList();privatevoidTemplateTextBlock_Loaded(objectsender,RoutedEventArgse){TextBlocktb=senderasTextBlock;如果(!this.templateTextBlocks.Contains(tb))this.templateTextBlocks.Add(tb);}当然,如果您要加载和卸载控件,这可能不适合您。如果您正在使用数据绑定,您是否尝试过使用绑定转换器?在这种情况下,你会做类似的事情......FontWeight={BindingPath=TextProperty,Converter={StaticResourceBoldConverter}}如果(myTestString.Contains("Bob"))返回FontWeights.Bold;返回FontWeights.Normal;这使得尝试逐个元素地定位特定元素变得不那么痛苦。我对这个请求的第一反应是:你真的确定要这样做吗?我通常敦促开发人员查看正在使用的现有控制模式。在这种情况下,您似乎可以控制模板。当然,这并不能提供您所追求的灵活性。您似乎追求的是可自定义控件的“圣杯”,希望在不复制控件的整个模板的情况下调整控件的任何微小细节。当然,如果我害怕管理它的句法和语义规则,这显然是不可能的。话虽如此,总有例外。所以我会提出一个可能的选择,尽管你不应该这样做。这个旧答案提供了一个Descendents扩展方法,允许您枚举对象树中的控件。给定一个TreeViewItem实例,您应该能够找到您要查找的TextBlock:-TextBlocktb=treeViewItem.Descendents().OfType().Where(t=>t.Name=="myTextBlock").FirstOrDefault();也试试这个TextBlocktxtBlk=grd.FindName("txtBlkName")asTextBlock;其中grd=你的根元素(你要找的元素的父元素)以上是C#学习教程分享的:SilverlightDataTemplate中访问元素的所有内容,如果对你有用还需要进一步了解C#学习教程,希望大家多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: