此问题已在此处有答案:
How to display WPF elements in one or more horizontal lines dependent on number of controls? [closed](1个答案)
14小时前关闭
我的用例-我有一个固定高度(比如40 px)的按钮水平布局(目前是StackPanel)。按钮排成一行,每个按钮高度为40。按钮可以有不同的宽度(取决于内容-文本)。用户可以编辑按钮文本,因此宽度可以在运行时更改。
我需要一种方法来处理的情况下,按钮溢出可用的水平空间没有滚动。在这种情况下,用户希望将布局更改为2行。按钮高度将相应修改(更改为20)。
我希望它尽可能简单。
有什么实际的解决办法吗?
1条答案
按热度按时间4dc9hkyq1#
最直接的解决方案是子类化
WrapPanel
并覆盖ArrangeOverride
。您可以添加一个依赖项属性来跟踪面板是否溢出到第二行,然后可以将其用作触发器的源,并在排列过程中设置该属性。EnhancedWrapPanel
XAML示例
其他注意事项要警惕一种潜在的情况,即对行计数更改的响应本身可能导致行计数更改,从而陷入无限循环。只要你只改变子对象的高度而不是宽度,你就没问题,但是如果你曾经在不同的场景中应用过这个,你可能需要在设置
HasOverflow
之前检查一下,以确保排列过程本身不是由HasOverflow
的更改触发的。还要感谢Denis Schaf在另一个问题中提出了XAML部分的答案,这个问题也已经结束。