Page
안에는 TreeView
이 있습니다. ItemsControl
안에있는 것들을 페이지 가장자리에서 스크롤하는 대신 줄 바꿈하는 방법은 무엇입니까? WrapPanel
은 아무 것도하지 않는 것 같습니다.WPF 'TreeView'내의 항목 감싸기
리프 항목을 랩핑하는 방법을 묻는 것과 같지 않습니다. ItemsControl
을 랩핑 할 필요는 없지만 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
을 사용하고 0을 Orientation
으로 변경하십시오. 트리 내의 임의의 레이어에서은 다른 레이어와 다를 수 있습니다. breaks UI virtualization for the entire tree when that layer is expanded. 따라서 위 트리의 모든 VirtualizingStackPanel
에는 세로/기본 방향이 있고 마지막 레이어의 가로 배열은 Expander
입니다.
위의 내용은 다음과 같습니다. "ALPHA"는 TopLevelItem
이며, GUID를이 MidLevelItem
들, 그리고 각 진수 쌍은 (당신이 포장되지 알 수 있지만, 가장자리를지나 계속 해 서있는) 개인 LowLevelItem
입니다 :
처음부터 문제를 재현하는 데 사용할 수있는 샘플 데이터를 제공하십시오. https://stackoverflow.com/help/mcve – mm8
@ mm8 방금 편집 한 스크린 샷이 도움이되는지 알려주십시오. –
확실히 그렇지 않습니다. 누구나 Visual Studio에 붙여 넣을 수있는 코드 조각을 제공하고 문제를 재현하기 위해 실행해야합니다. – mm8