wpf - 将 TreeView 的布局更改为看起来像多个 ListBox

标签 wpf templates listview treeview

<分区>

我正在尝试从此更改数据绑定(bind) TreeView 的布局:

alt text

对此:

alt text

当然选择必须正常工作:

alt text

关于如何做到这一点,您有什么想法吗?我一直在尝试更改模板,但找不到实现此行为的方法。也许一个组件已经存在...

感谢您的帮助!

最佳答案

这很难。它似乎需要一个 HierarchicalDataTemplate,但是因为您想要的行为需要多个 ItemsControl,所以它不会按预期工作。我认为没有一种方法可以在 XAML 中创建一个 TreeView 模板来执行此操作。最好的办法是创建某种自定义项目控件。您可能需要在代码中而不是在 XAML 中执行项目绑定(bind),因为没有 HierarchicalDataTemplate,XAML 无法理解嵌套关系。

也就是说,如果保证只有 2 层嵌套(如您的示例所示),您可以使用以下标记轻松地做到这一点:

<Window.Resources>
    <DataTemplate x:Key="ItemTemplate">
        <TextBlock Text="{Binding Name}"/>
    </DataTemplate>
</Window.Resources>

<StackPanel Orientation="Horizontal">
    <ListBox Name="Level1" Width="150" Height="150"
             ItemsSource="{Binding Collection}" 
             ItemTemplate="{StaticResource ItemTemplate}"/>
    <ListBox Name="Level2" Width="150" Height="150"
             ItemsSource="{Binding ElementName=Level1, Path=SelectedValue.Children}"
             ItemTemplate="{StaticResource ItemTemplate}"/>
    <ListBox Name="Level3" Width="150" Height="150"
             ItemsSource="{Binding ElementName=Level2, Path=SelectedValue.Children}"
             ItemTemplate="{StaticResource ItemTemplate}"/>
</StackPanel>

Collection 是您的根项目集合,每个项目都有一个名为 Children 的属性,其中包含子集合。

但我认为您要求的是一个项目控件,它可以支持任意数量的嵌套级别,而不仅仅是 2 个。所以在那种情况下,我会在代码隐藏中执行此操作。绑定(bind)将是相同的 - 也就是说,在每个级别,ListBox 应该绑定(bind)到父级别的项目。但是您显然需要为每个嵌套级别迭代并创建一个 ListBox

关于wpf - 将 TreeView 的布局更改为看起来像多个 ListBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2369901/

相关文章:

c++ - template<T> 类中 T 的 vector 的 vector

android - 在ListView中添加图像

java - 自定义 ListView setOnItemClickListener 不起作用

android - 如何在方向更改时保留 android ListView 中单选按钮的值

c# - Wpf DatePicker 启动时验证错误

c# - 加载资源字典时发生错误

WPF Storyboard动画即使在设置后也永远循环

.net - 如何解决 VS2019 警告以使用 `JoinableTaskFactory.SwitchToMainThreadAsync()` 而不是 Invoke/BeginInvoke?

c++ - 类模板继承在 GCC 中编译失败,但在 Visual Studio 中有效

c++ - 抑制特定模板代码的编译器警告