我需要在WPF(C#)中使用Treeview,对所有TreeView项目进行垂直包装。到目前为止,我让它为root项目工作:当控件的高度变小时,他们和他们所有的孩子都会被打破。但我想要一个孩子TreeView-Items也被打破的行为。请查看这些示例,因为它不容易用文字解释:
示例树:
rootitem1
child1
child2
rootitem2
child3
child4
如果控件高度大小减小,Tree换行如下所示:
rootitem1 rootitem2
child1 child3
child2 child4
但我希望包装会影响每一个项目,甚至包括孩子,所以树看起来像这样:
rootitem1 child4
child1
child2
rootitem2
child3
这是我的XAML:
<Window x:Class="tv_test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="150" Width="200">
<Grid>
<TreeView ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<!-- expand items -->
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.Resources>
<!-- example items -->
<TreeViewItem Header="rootitem1">
<TreeViewItem Header="child1"></TreeViewItem>
<TreeViewItem Header="child2"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="rootitem2">
<TreeViewItem Header="child3"></TreeViewItem>
<TreeViewItem Header="child4"></TreeViewItem>
</TreeViewItem>
<!-- vertical wrap which should break every item, but actually only breaks root items -->
<TreeView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</TreeView.ItemsPanel>
</TreeView>
</Grid>
</Window>
答案 0 :(得分:0)
这不是一个完整的解决方案,我认为你必须务实地做你想要的。
虽然这提供了一半的功能。
<TreeView ScrollViewer.VerticalScrollBarVisibility="Disabled">
<TreeView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</TreeView.ItemsPanel>
<!-- expand items -->
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.Resources>
<!-- example items -->
<TreeViewItem Header="rootitem1">
<TreeViewItem.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</TreeViewItem.ItemsPanel>
<TreeViewItem Header="child1"></TreeViewItem>
<TreeViewItem Header="child2"></TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="rootitem2">
<TreeViewItem.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</TreeViewItem.ItemsPanel>
<TreeViewItem Header="child3"></TreeViewItem>
<TreeViewItem Header="child4"></TreeViewItem>
</TreeViewItem>
<!-- vertical wrap which should break every item, but actually only breaks root items -->
</TreeView>