Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF在“TreeView”中包装项目`_C#_Wpf_Xaml_Treeview_Word Wrap - Fatal编程技术网

C# WPF在“TreeView”中包装项目`

C# WPF在“TreeView”中包装项目`,c#,wpf,xaml,treeview,word-wrap,C#,Wpf,Xaml,Treeview,Word Wrap,在页面中我有下面的树状视图。如何才能将ItemsControl中的内容包装起来,而不是从页面边缘滚动?WrapPanel似乎什么都没做 注意,这与询问如何包装叶项目不同——我不需要包装ItemsControls(只有一个),而是需要包装ItemsControl中的内容 <TreeView VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling" V

页面中
我有下面的
树状视图
。如何才能将
ItemsControl
中的内容包装起来,而不是从页面边缘滚动?
WrapPanel
似乎什么都没做

注意,这与询问如何包装叶项目不同——我不需要包装
ItemsControl
s(只有一个),而是需要包装
ItemsControl
中的内容

<TreeView
    VirtualizingPanel.IsVirtualizing="True"
    VirtualizingPanel.VirtualizationMode="Recycling"
    VirtualizingPanel.ScrollUnit="Pixel"
    VirtualizingPanel.IsVirtualizingWhenGrouping="True"
    Name="Tree">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate
            DataType="{x:Type viewModel:HighLevelItem}"
            ItemsSource="{Binding MidLevelItems}">
            <TextBlock
                Text="{Binding HighLevelName}"/>
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate
                    DataType="{x:Type viewModel:MidLevelItem}">
                    <Expander>
                        <Expander.Header>
                            <TextBlock
                                Text="{Binding MidLevelName}"/>
                        </Expander.Header>
                        <Expander.Content>
                            <ItemsControl
                                ItemsSource="{Binding LowLevelItems}">
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <WrapPanel
                                            Orientation="Horizontal"/>
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock
                                            Text="{Binding LowLevelName}"/>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </Expander.Content>
                    </Expander>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>
…以及代码中的其他地方(以获取要填充的
TreeView
):

还请注意,我使用的是
扩展器
,而不是继续使用另一个分层数据模板,因为我需要该层水平排列项目,并在树中的任何层更改
虚拟化StackPanel
方向
,使其与其他层不同。因此,上面树中的所有
virtualzingstackpanel
s都具有垂直/默认方向,最后一层的水平排列来自
Expander
s

这是上面的样子。“ALPHA”是一个
TopLevelItem
,guid是
MidLevelItem
s,每个十六进制对都是一个单独的
LovelItem
(您会注意到它没有包装,而是继续经过边缘):


您需要指定
扩展器的
宽度
,例如:

<Expander Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=TreeView}}">
...

...

您可能需要使用转换器或从
树视图的
实际宽度
中减去左边缘偏移量的东西。请提供一些示例数据,用于从头开始重现您的问题:@mm8请告诉我刚才编辑的屏幕截图是否有帮助?当然没有。您应该提供任何人都可以粘贴到Visual Studio中并按原样运行的代码片段,以再现您的问题。@mm8我编辑了一些代码,这些代码非常相似,足以说明问题所在。如果您需要指定扩展器的宽度,请告知我,例如:
Tree.Items = new[] { new HighLevelItem { HighLevelName = "ALPHA", MidLevelItems = Enumerable.Repeat(0, 1000).Select(_ => new MidLevelItem { MidLevelName = Guid.NewGuid().ToString(), LowLevelItems = Enumerable.Repeat(0, 1000).Select(__ => new LowLevelItem { LowLevelName = "ff" }).ToArray() }).ToArray() } };
<Expander Width="{Binding ActualWidth, RelativeSource={RelativeSource AncestorType=TreeView}}">
...