确定ListBox中最宽元素的宽度

时间:2010-09-23 00:29:41

标签: silverlight silverlight-4.0 listbox listboxitem

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

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

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

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

3 个答案:

答案 0 :(得分:2)

没试过,但它可以工作: http://thibautvs.com/blog/?p=1775 “关键点是将ListBox放在具有”自动“大小模式”

的网格列中

答案 1 :(得分:0)

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

答案 2 :(得分:0)

搞清楚这一点告诉我,如果没有扩展/覆盖ListBox的程度是不可能的 - 设置VirtualizingStackPanel的IsVirtualizing属性没有效果。

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