TreeView节点的奇怪选择行为

时间:2014-11-23 05:46:47

标签: c# .net wpf treeview

点击TreeView的任何节点都不会选中它。我需要点击节点左侧的一个小矩形区域(图中红色显示)来选择它。此外,以这种方式选择节点意味着将立即选择具有所有子节点的整个子树。不知道发生了什么事。

enter image description here

这是我的XAML:

<TreeView ItemsSource="{Binding FirstGeneration}">
    <TreeView.Resources>         
      <DataTemplate DataType="{x:Type local:AccountNodeVM}">
        <TreeViewItem Header ="{Binding Name}" />
      </DataTemplate>  

      <HierarchicalDataTemplate DataType="{x:Type local:CategoryNodeVM}" ItemsSource="{Binding SubCategories}">
        <TreeViewItem  Header="{Binding Name}" ItemsSource="{Binding Accounts}" />
      </HierarchicalDataTemplate>
    </TreeView.Resources>

    <TreeView.ItemContainerStyle>
      <Style TargetType="{x:Type TreeViewItem}">
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
        <Setter Property="FontWeight" Value="Normal" />
      </Style>
    </TreeView.ItemContainerStyle>
  </TreeView>

FirstGenerationSubCategoriesAccounts都在我的ViewModel中定义。我尝试在我的TextBlock中使用TreeViewItem代替HierarchicalDataTemplate,但没有任何好处。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

想出来了。 TreeView似乎为每个节点自己创建TreeViewItem,因此在创建HierarchicalDataTemplate时,您不需要在其中嵌入TreeViewItem,否则WPF将包裹您的{ {1}}在其自己的TreeViewItem内,从而混淆了选择机制。只需在TreeViewItem中放置一个TextBlock(或者StackPanel或其他一些容器(如果您有复杂的节点结构),让WPF完成节点创建工作。希望这有助于其他人。