希望没有其他人已经问过这个问题,但是我进行了搜索,找不到任何提及。如果我错过了另一个可以解释这个问题的问题,请随时为我指明正确的方向。
我有一个WrapPanel,其数据绑定(bind)项基本上包含一个图标和一些可变长度的文本(这是图表的图例)。我非常喜欢这样的事实,当我将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>
如果您想举个例子,快速的Google搜索给了我this answer,其中包含一个代码示例。
如果您有大量数据,我也建议对此进行性能测试。
关于c# - WrapPanel : Trying to make the ItemWidth equal to the max width of any one element,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23524453/