如何根据控件的数量在一个或多个水平行中显示WPF元素?[关闭]

x4shl7ld  于 2023-05-13  发布在  其他
关注(0)|答案(1)|浏览(115)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

昨天关门了。
这篇文章是编辑并提交审查17小时前.
Improve this question
我的用例-我有一个固定高度(比如40 px)的按钮水平布局(目前是StackPanel)。按钮排成一行,每个按钮高度为40。按钮可以有不同的宽度(取决于内容-文本)。用户可以编辑按钮文本,因此宽度可以在运行时更改。
我需要一种方法来处理的情况下,按钮溢出可用的水平空间没有滚动。在这种情况下,用户希望将布局更改为2行。按钮高度将相应修改(更改为20)。
我希望它尽可能简单。
我不想做一个自定义控件覆盖OnMeasure/OnArrangement等。但我不想使用像素的文本长度计算,这是永远不可靠的,需要考虑到显示器的DPI和有问题的窗口可以在具有不同DPI的显示器之间移动等。
有什么实际的解决办法吗?
如何构建一个自定义的WrapPanel,以便在子元素溢出到第二行时通知它们?

6psbrbz9

6psbrbz91#

您可以创建一个自定义Wrappanel-Class,用于在行数更改时设置itemheight属性:

<WrapPanel Orientation="Horizontal" Width="200">
                        <WrapPanel.Style>
                            <Style TargetType="WrapPanel">
                                <Setter Property="ItemHeight" Value="40"/>
                                <Style.Triggers>
                                    <Trigger Property="Rows" Value="2">
                                        <Setter Property="ItemHeight" Value="20"/>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </WrapPanel.Style>
                        
                        <Rectangle Fill="HotPink" Width="50"/>
                        <Rectangle Fill="lime" Width="50"/>
                        <Rectangle Fill="blue" Width="50"/>
                        <Rectangle Fill="Cyan" Width="50"/>
                        <Rectangle Fill="Red" Width="50"/>
                        <Rectangle Fill="Yellow" Width="50"/>
                    </WrapPanel>

为此,您所要做的就是基于公开属性中的行数的普通WrapPanel编写WrapPanel类

相关问题