如果未明确设置ListBox的宽度,则会自动将其宽度设置为其最宽可见项的宽度。这意味着当您向上和向下滚动并且最宽的可见数据项发生更改时,列表框本身的宽度会增加和减少。
那么找到列表中最宽项目的宽度的最佳方法是什么,然后将ListBox宽度设置为?我的ListBox数据模板是一个包含CheckBox和TextBlock的StackPanel,所以显然Textblock的宽度会根据其中的字符串长度而变化。
这里有一些关于SO的建议,答案范围从“猜测”到"measure the text size"(如何测量SL中的文本大小而不将其放在UI元素中?)。
有人可以给我一些想法吗?如果必须的话,我愿意迭代所有数据模板实例,虽然更好的选择可能是找到最长的字符串并从那里计算?
答案 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
属性没有效果。
我必须采用的解决方案是以编程方式选择一个好的宽度。