gpt4 book ai didi

c# - WPF 在 `TreeView` 内包装项目

转载 作者:行者123 更新时间:2023-11-30 17:34:07 24 4
gpt4 key购买 nike

Page 中,我有下面的 TreeView。我怎样才能让 ItemsControl 内的东西换行而不是滚出页面边缘? WrapPanel 似乎没有做任何事情。

请注意,这与询问如何包装叶项不同——我不需要包装 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>

...这里有一些类型定义:

public class HighLevelItem
{
public MidLevelItem[] MidLevelItems { get; set; }
public string HighLevelName { get; set; }
}
public class MidLevelItem
{
public LowLevelItem[] LowLevelItems { get; set; }
public string MidLevelName { get; set; }
}
public class LowLevelItem
{
public string LowLevelName { get; set; }
}

...以及代码中的其他地方(让 TreeView 填充):

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 而不是继续使用另一个分层数据模板,因为我需要该层水平排列项目,并更改 Orientation树中任何层的 VirtualizingStackPanel 都不同于其他层 breaks UI virtualization for the entire tree when that layer is expanded .因此,上面树中的所有 VirtualizingStackPanel 都具有垂直/默认方向,最后一层的水平排列来自 Expander

这是上面的样子。 “ALPHA”是一个 TopLevelItem,Guid 是 MidLevelItem,每个十六进制对都是一个单独的 LowLevelItem(您会注意到它们不是环绕但继续越过边缘):

Screenshot of the above code

最佳答案

您需要指定 ExpanderWidth,例如:

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

您可能想要使用转换器或从 TreeViewActualWidth 中减去左边缘偏移量的东西。

关于c# - WPF 在 `TreeView` 内包装项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com