c# - 如何在 TreeViewItem 的模板上使用 DataTemplateSelector?
问题描述
我有一个TreeView
带有自定义资源字典的TreeViewItems
模板。
我需要能够TreeViewItem
根据其绑定的值以编程方式更改每个模板。
据我所知,我无法从ResourceDictionary
xaml 访问绑定。
我想我需要TreeView
用我自己的 userControl 扩展,但我不确定我需要实际添加什么来实现我想要的。
提前致谢。
<TreeView Name="dirTree" AlternationCount="2" Background="#FAFAFA"
ScrollViewer.VerticalScrollBarVisibility ="Visible"
VerticalAlignment="Stretch"
ItemsSource="{Binding}"
VirtualizingStackPanel.IsVirtualizing="False"
VirtualizingStackPanel.VirtualizationMode="Standard"
ItemTemplateSelector="{StaticResource tuningDataTemplateSelector}">
<TreeView.Resources>
<ResourceDictionary Source="UI/Styles/TunerTreeViewStyle.xaml" />
</TreeView.Resources>
</TreeView>
这是树视图,如您所见,我设置了 ItemTemplateSelector,但这只会更改内容。我需要为 TreeViewItem 控件的模板本身添加一个选择器。所以我需要将它添加到 TunerTreeViewStyle.xaml 但我认为你不能从那里获取绑定数据。
解决方案
您不能使用 aItemTemplateSelector
来更改ControlTemplate
a 的TreeViewItem
。
如果你想这样做,你可以尝试定义一个ItemContainerStyle
with aDataTrigger
来设置基于某个源属性Template
的属性,例如:TreeViewItem
<TreeView>
<TreeView.Resources>
<Style TargetType="TreeViewItem">
<Style.Triggers>
<DataTrigger Binding="{Binding YourProperty}" Value="A">
<Setter Property="Template" Value="{StaticResource ResourceA}" />
</DataTrigger>
<DataTrigger Binding="{Binding YourProperty}" Value="B">
<Setter Property="Template" Value="{StaticResource ResourceB}" />
</DataTrigger>
<!-- ... -->
</Style.Triggers>
</Style>
</TreeView.Resources>
</TreeView>
推荐阅读
- wpf - 如何将 IsEnabledChanged(未路由事件)路由到 EventHandler WPF
- python - 按最大重叠百分比和值过滤整数范围列表
- html - 将html表单动作参数传递给django视图
- email - jenkins 核心/插件漏洞/警告的非GUI通知
- java - 生成不可猜测的促销代码范围
- mysql - Mysql 存储过程 - 空间函数
- wordpress - 如何使用 WordPress 插件 polylang 进行自定义字符串翻译?
- reactjs - 根据反应中字符串数组中指定的顺序对组件进行排序
- arrays - MongoDB GroupBy子数组但总和父
- android - Android 8 及更高版本:如何获取应用托盘中打开的应用列表