希望没有其他人已经问过这个问题,但是我进行了搜索,找不到任何提及。如果我错过了另一个可以解释这个问题的问题,请随时为我指明正确的方向。

我有一个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/

10-11 01:28