wpf - WPF TreeView 中具有未知级别的叶节点的自己的模板

标签 wpf treeview hierarchicaldatatemplate

我正在尝试向 WPF 中 TreeView 的叶节点添加复选框。如果我们在层次结构中具有固定数量的级别并为每个级别使用 HierarchicalDataTemplate,我知道如何执行此操作。但是当我想要这个时该怎么办:
-节点1
-- 节点 1a(带有复选框的叶节点)
-- 节点1b
--- 节点 1bI(带有复选框的叶节点)
-节点2
-- 节点 2a(带有复选框的叶节点)

我将代码文件中的DataContext设置为DataTable。只有一张表,与其自身有关系。

DataContext = ds.MyDataTable;

XAML:

<UserControl x:Class="JostyWpfControls.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Height="240" Width="312">
    <UserControl.Resources>
        <HierarchicalDataTemplate x:Key="myTemplate" 
            ItemsSource="{Binding myDatasetRelation}">
            <CheckBox IsChecked="{Binding IsChosen}">
                <TextBlock Text="{Binding Description}"/>
            </CheckBox>
        </HierarchicalDataTemplate>
    </UserControl.Resources>
    <Grid>
        <TreeView x:Name="treeView" 
            ItemsSource="{Binding}" 
            ItemTemplate="{StaticResource myTemplate}">
        </TreeView>
    </Grid>
</UserControl>

这是有效的,但给了我一个所有节点的复选框。我只希望叶节点有一个复选框。

最佳答案

您可以在数据模板中使用触发器来确定复选框是否可见:

<HierarchicalDataTemplate x:Key="myTemplate" 
                          ItemsSource="{Binding myDatasetRelation}">
  <StackPanel>
    <CheckBox x:Name="CheckBox" IsChecked="{Binding IsChosen}" 
              Content="{Binding Description}" />
    <TextBlock x:Name="LeafLabel" Text="{Binding Description}"
               Visibility="Collapsed" />
  </StackPanel>
  <HierarchicalDataTemplate.Triggers>
    <DataTrigger Binding="{Binding myDatasetRelation.Count}" Value="0">
      <Setter TargetName="CheckBox" Property="Visibility" Value="Collapsed" />
      <Setter TargetName="LeafLabel" Property="Visibility" Value="Visible" />
    </DataTrigger>
  </HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>

我不确定通过 myDatasetRelation 绑定(bind)的值是否具有 Count 属性,但如果没有,那么您可以使用 Length 或找到其他方法来确定它是否为空(如果没有更简单的方法可用,则可以使用 IValueConverter

关于wpf - WPF TreeView 中具有未知级别的叶节点的自己的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481297/

相关文章:

c# - 如何在带有自定义 ContentTemplate 的 WPF 按钮上使用 accesskey?

c# - MVVM 和控件创建

c# - Silverlight 3 中的 TreeView 选择问题

java - 如何为每个节点指定唯一的名称

wpf - 关闭命令 WPF

c# - WPF:TabControl.ItemTemplate 和 TabItem.ContentTemplate 的区别

javascript - 似乎无法将节点添加到 Kendo UI TreeView

c# - WPF TreeView XAML HierarchicalDataTamplate

wpf - 如何垂直对齐 XAML TreeView HierarchicalDataTemplate 中的项目符号?

c# - WPF:将具有不同类型项目的多个级别添加到 TreeView