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}}">
...