c# - 环绕面板 : Trying to make the ItemWidth equal to the max width of any one element

标签 c# wpf data-binding .net-4.0

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

我有一个包含数据绑定(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/

相关文章:

wpf - 如何让 UIElement 支持绑定(bind)?

c# - 'L'运算符后缺少操作数

c# - 组合多个列表

c# - 在 C# 中定义可以接受大量参数的函数

c# - 寻找如何添加调整大小按钮

c# - WPF MVVM : Set focus to current selected item in Datagrid on button click

c# - 带有空数据表的 DataGrid 允许用户输入 C# WPF

c# - 如何将分配目标设置为 GVRHead GoogleVR

WPF Canvas : Children. Add() 卡在后台线程上?

c# - .net c# 限制 observablecollection 中的条目数