-2

当您没有明确设置 ListBox 的宽度时,它会自动将其宽度设置为其最宽的可见项的宽度。这意味着当您向上和向下滚动并且最宽的可见数据项发生变化时,列表框本身的宽度会增加和减少。

那么找到列表中最宽项的宽度的最佳方法是什么,然后将 ListBox 宽度设置为该宽度?我的 ListBox 数据模板是一个 StackPanel,其中包含一个 CheckBox 和一个 TextBlock,因此显然 Textblock 的宽度会根据其中字符串的长度而有所不同。

这里已经有一些关于 SO 的建议,答案从“猜测”到“测量文本大小”(如何在 SL 中测量文本大小而不将其放在 UI 元素中?)。

谁能给我一些想法?如果必须,我愿意迭代所有数据模板实例,尽管更好的选择可能是找到最长的字符串并从那里计算?

4

3 回答 3

2

没有尝试过,但它可以工作: http ://thibautvs.com/blog/?p=1775 “关键是将列表框放在具有“自动”大小模式的网格列中”

于 2011-12-20T15:39:07.790 回答
0

ListBox 使用 VirtualizingStackPanel 作为默认 ItemsPanel。因为 VirtualizingStackPanel 仅为可见项目创建 UI 元素,所以您可能会看到您描述的行为。要减轻这种行为,您可以尝试设置 VirtualizingStackPanel.IsVirtualizing="False" 或将 ItemsPanel 更改为 StackPanel。

于 2010-09-23T10:18:32.420 回答
0

解决这个问题向我表明,如果不扩展/覆盖 ListBox 是不可能的——设置IsVirtualizingVirtualizingStackPanel 的属性没有效果。

我必须采用的解决方案是以编程方式选择一个好的宽度。

于 2010-10-17T22:26:20.750 回答