首页 > 解决方案 > 如何在 TreeViewItem 的模板上使用 DataTemplateSelector?

问题描述

我有一个TreeView带有自定义资源字典的TreeViewItems模板。

我需要能够TreeViewItem根据其绑定的值以编程方式更改每个模板。

据我所知,我无法从ResourceDictionaryxaml 访问绑定。

我想我需要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 但我认为你不能从那里获取绑定数据。

标签: c#wpfdata-bindingtreeview

解决方案


您不能使用 aItemTemplateSelector来更改ControlTemplatea 的TreeViewItem

如果你想这样做,你可以尝试定义一个ItemContainerStylewith 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>

推荐阅读