【问题标题】:TreeViewItem not showing its expander controlTreeViewItem 未显示其扩展器控件
【发布时间】:2010-12-14 04:39:29
【问题描述】:

我有以下 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 Header,我可以让主 TreeViewItem 的子项折叠和展开。我该如何解决?

【问题讨论】:

    标签: .net wpf data-binding treeview


    【解决方案1】:

    您的 XAML 在默认 WPF 项目中工作正常,除了一个错字(我将第二个 更改为 )。当我运行它时,我看到“TopMost”一词旁边的选择器(小三角形),它工作正常。

    我愿意:

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

    注意

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

    你会发现:

    1. 您的 TreeView 不会跟踪您选择的项目,除非在顶层
    2. 您可以独立选择“树”中的项目,例如您可以选择多个项目而他们没有意识到这一点。像复选框而不是单选按钮。
    3. 如果您完全省略 标记,它仍然可以正常运行。

    这是因为 TreeView 无法完成其工作:DataTemplate 将 TreeViewItems 隐藏在 TreeView 中,因此它只能看到顶级项目。查看 HierarchicalDataTemplate 以了解使 TreeView 对象能够查看整棵树的好方法。

    【讨论】:

    • 感谢您的广泛回答。我仍然不确定是什么导致扩展器按钮消失,但是当我实现 HierarchicalDataTemplate 时它确实又回来了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多