In einem Page
Ich habe die folgenden TreeView
. Wie kann ich die Objekte innerhalb der ItemsControl
erhalten, um den Seitenrand zu umblättern anstatt zu scrollen? Die WrapPanel
scheint nichts zu tun.WPF Wrap Artikel innerhalb `TreeView`
Beachten Sie, dies ist nicht das gleiche wie fragen, wie Blattelemente zu wickeln - ich brauche nicht ItemsControl
s wickeln (es gibt nur eine), aber müssen die Dinge in die ItemsControl
wickeln.
<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>
... hier sind einige Typdefinitionen:
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; }
}
... und woanders in Ihrem Code (um die TreeView
zu erhalten zu füllen):
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() } };
Beachten Sie auch, dass ich eine Expander
verwende, anstatt mit einer anderen hierarchischen Datenvorlage fortzufahren, da ich diese Ebene benötigen muss, um Elemente horizontal angeordnet zu haben und die Orientation
der 0 zu ändernauf einer beliebigen Ebene innerhalb des Baums anders als die anderen Ebenen breaks UI virtualization for the entire tree when that layer is expanded. Daher haben alle VirtualizingStackPanel
s im obigen Baum eine vertikale/Standardausrichtung und die horizontale Anordnung für die letzte Schicht stammt von Expander
s.
So sieht das obige aus. „ALPHA“ ist ein TopLevelItem
sind die Guids MidLevelItem
s, und jedes Paar Hex ist ein individuelles LowLevelItem
(die Sie bemerken werden, sind nicht Einwickeln aber weiter vorbei an der Kante):
Bitte stellen Sie einige Beispieldaten zur Verfügung, die verwendet werden können, um Ihr Problem von Grund auf zu reproduzieren: https://stackoverflow.com/help/mcve – mm8
@ mm8 Lassen Sie mich wissen, wenn der Screenshot, den ich gerade bearbeitet habe, hilft? –
Es ist sicherlich nicht. Sie sollten Code-Snippets bereitstellen, die jeder einfach in Visual Studio einfügen und ausführen kann, um Ihr Problem zu reproduzieren. – mm8