如何打破每个项目,但不是完整的根?

时间:2015-01-18 12:05:18

标签: c# wpf treeview wrapping

我需要在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>

1 个答案:

答案 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>