TreeViewItem没有显示其扩展器控件

时间:2009-11-07 16:23:15

标签: .net wpf data-binding treeview

我有以下XAML:

<TreeView>
   <TreeViewItem ItemsSource={Binding} Header="TopMost" IsExpanded="True">
      <TreeViewItem.ItemTemplate>
         <DataTemplate>
            <TreeViewItem>
              <TreeViewItem.Header>
                <TextBlock Text="{Binding SubTopic}"/>
              <TreeViewItem.Header>
              <!-- further data representation -->
            </TreeViewItem>
        </DataTemplate>
      </TreeViewItem.ItemTemplate>
   </TreeViewItem>
   <TreeViewItem>
   </TreeViewItem>
</TreeView>

第一个TreeViewItem确实展开并显示其子节点,但是文本TopMost左侧应该可见的选择器不存在。通过双击TopMost标题,我可以让主TreeViewItem的子项进行折叠和展开。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

您的XAML在默认WPF项目中工作正常,除了输入错误(我将第二个&lt; TreeViewItem.Header&gt;更改为&lt; /TreeViewItem.Header>)。当我运行它时,我看到“TopMost”一词旁边的选择器(小三角形),它可以正常工作。

我会:

  • 看看你是否在任何时候都覆盖了TreeViewItem或TreeView的样式。
  • 在运行时浏览生成的可视化树(使用VS.NET调试器或Mole等工具),以查看ToggleButton是否作为Grid的第一个子项存在于Visual树中。 (TreeViewItem的默认模板使用ToggleButton而不是Expander)
  • 与一个孩子分开试一试是否有效。如果是,则逐步更改两者,直到找到问题为止。

注意

没有法律规定你不能像你正在做的那样在DataTemplates中使用TreeViewItems,但它通常不是一个好主意,因为它违背了&lt; TreeView&gt;的目的,即提供选择,焦点和对多个TreeViewItems的可访问性支持。

你会发现:

  1. 您的TreeView不会跟踪您选择的项目(顶级除外)
  2. 您可以单独选择“树”中的项目,例如,您可以选择多个项目,但他们没有意识到这一点。像复选框而不是单选按钮。
  3. 如果省略&lt; TreeView&gt;完全标记它仍然可以正常运行。
  4. 这是因为TreeView无法完成其工作:DataTemplate正在从TreeView隐藏TreeViewItems,因此它只能看到顶级项目。查看HierarchicalDataTemplate,了解如何使TreeView对象能够查看整个树。