希望没有其他人问过这个问题,但我已经搜索过,找不到任何提及。如果我错过了另一个解释这个问题的问题,请随时指出我正确的方向。
我有一个包含数据绑定(bind)项的 WrapPanel,这些项基本上包含一个图标和一些可变长度的文本(这是图表的图例)。当我将 ItemWidth 设置为某个设定值时,我真的很喜欢这些项目显示在整齐的列中。但是,由于每个项目中文本长度的高度可变性,我无法轻松选择适用于所有情况的特定值。也就是说,在某些情况下,所有项目的文本可能都很短,因此 ItemWidth 的值较小是合适的。但有时,如此小的 ItemWidth 会导致某些项目中的文本被截断。
我认为我可以以某种方式将 ItemWidth 数据绑定(bind)到 WrapPanel 的子项,以便提取每个项目的宽度(并找到最大宽度,并将其用作 ItemWidth 等),但我对这样做持怀疑态度,因为数据绑定(bind)到错误事物的可能性。例如,绑定(bind)到在 ItemWidth 更改时更改的内容,从而导致无限循环(或者至少,重复不必要次数的循环。
最好的设置方法是什么,以便 ItemWidth 仅与防止截断所需的一样大?
编辑:
我想保留 WrapPanel 提供的功能,该功能允许有可变数量的项目列,具体取决于 WrapPanel 本身允许的空间。
最佳答案
您可以将每个项目包装在 Grid
中,并使用 Grid 的 ShareSizeScope
属性来确保所有项目共享相同的宽度。
例如,在您的 WrapPanel 上,您可以将 Grid.IsSharedSizeScope
设置为 true
<WrapPanel Grid.IsSharedSizeScope="True">
然后您将每个项目包装在一个单元格 Grid
中,该单元格使用 SharedSizeGroup
属性告诉他们他们都共享一个大小
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="SharedGroup" />
</Grid.ColumnDefinitions>
<ContentPresenter />
</Grid>
如果你想要一个例子,一个快速的谷歌搜索给了我 this answer其中包含一个代码示例。
如果您有大量数据,我也建议您对此进行性能测试。
关于c# - 环绕面板 : Trying to make the ItemWidth equal to the max width of any one element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524453/