如何解决水平调整大小时具有动态方向的WPF树视图
从初始视图可以做到这一点吗?
Header1
- item1
- item2
- item3
Header2
- item1
- item2
水平调整窗口大小时,项目也会从垂直调整为水平:
Header1
- item1-item2
- item3
Header2
- item1-item2
根据窗口大小,随后的项目将移至下一个水平位置。也就是说,如果在全屏模式下,所有项目都水平排列,并且多余的项目将在下一行。
示例:
Header3
-item1 -item2 -item3 -item4 ...
-item11 -item12 -item13
如果可能的话,该怎么做?谢谢!
解决方法
根据您的描述,我猜您想显示分层数据,因此我将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>
完成这项工作的关键是使用ItemsPanel
中的WrapPanel
作为TreeViewItem
。如果超出可用空间,则包装面板会将项目放在下一行。
将子元素从左到右顺序放置,将内容中断到包含框边缘的下一行。
ItemContainerTemplate
会将此面板应用于所有TreeViewItem
。禁用水平滚动是必要的,因为否则将为项目提供所需的尽可能大的空间(以正无穷大度量),因此项目将不会包装。我没有将WrapPanel
分配给TreeView
本身,因为那样也会包裹标题。
当然可以使用TreeView
以外的其他控件,但是概念是相同的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。