C# 水平调整大小时具有动态方向的WPF Treeview

C# 水平调整大小时具有动态方向的WPF Treeview,c#,wpf,treeview,C#,Wpf,Treeview,从初始视图可以这样做吗: 校长1 项目1 项目2 项目3 校长2 项目1 项目2 水平调整窗口大小时,项目也会从垂直调整为水平: 校长1 项目1-项目2 项目3 校长2 项目1-项目2 后续项目将根据窗口大小移动到下一个水平位置。也就是说,如果全屏显示,所有项目都水平排列,多余的项目将显示在下一行。 示例: 校长3 -项目1-项目2-项目3-项目4 -项目11-项目12-项目13 如果可能,如何做到这一点?谢谢 根据您的描述,我猜您希望显示分层数据,因此我使用带有静态项的Tree

从初始视图可以这样做吗:

校长1

  • 项目1
  • 项目2
  • 项目3
校长2

  • 项目1
  • 项目2
水平调整窗口大小时,项目也会从垂直调整为水平:

校长1

  • 项目1-项目2
  • 项目3
校长2

  • 项目1-项目2
后续项目将根据窗口大小移动到下一个水平位置。也就是说,如果全屏显示,所有项目都水平排列,多余的项目将显示在下一行。
示例:
校长3
-项目1-项目2-项目3-项目4
-项目11-项目12-项目13


如果可能,如何做到这一点?谢谢

根据您的描述,我猜您希望显示分层数据,因此我使用带有静态项的
TreeView
来演示如何执行此操作,但对于动态数据也是如此

<TreeView ScrollViewer.HorizontalScrollBarVisibility="Disabled">
   <TreeView.ItemContainerStyle>
      <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource {x:Type TreeViewItem}}">
         <Setter Property="ItemsPanel">
            <Setter.Value>
               <ItemsPanelTemplate>
                  <WrapPanel/>
               </ItemsPanelTemplate>
            </Setter.Value>
         </Setter>
      </Style>
   </TreeView.ItemContainerStyle>
   <TreeViewItem Header="Header 1">
      <TreeViewItem Header="Item 1"/>
      <TreeViewItem Header="Item 2"/>
      <TreeViewItem Header="Item 3"/>
   </TreeViewItem>
   <TreeViewItem Header="Header 2">
      <TreeViewItem Header="Item 1"/>
      <TreeViewItem Header="Item 2"/>
   </TreeViewItem>
</TreeView>

这项工作的关键是使用
TreeViewItem
s的as
ItemsPanel
。如果项目超出可用空间,包裹面板将在下一行中放置项目

将子元素按从左到右的顺序放置,将内容打断到包含框边缘的下一行

ItemContainerTemplate
将此面板应用于所有
treevieItem
s。禁用水平滚动是必要的,因为否则项目将获得所需的最大空间(以正无穷大度量),因此项目将不会包装。我不会将
WrapPanel
分配给
TreeView
本身,因为这也会包装标题


当然,您可以使用除
TreeView
之外的其他控件,但概念是相同的。

是的。你真的想问一个肯定/否定的问题吗?请签出问题。那家伙回答说这是怎么做到的。谢谢那个家伙!