代码之家  ›  专栏  ›  技术社区  ›  slugster Joey Cai

确定列表框中最宽元素的宽度

  •  -1
  • slugster Joey Cai  · 技术社区  · 14 年前

    如果不显式设置列表框的宽度,它将自动将其宽度设置为其最宽的宽度。 看得见的 项目。这意味着,当上下滚动和最宽的可见数据项发生变化时,列表框本身的宽度会增加和减少。

    那么,找到列表中最宽项的宽度,然后将列表框宽度设置为该宽度的最佳方法是什么呢?我的列表框数据模板是一个包含复选框和文本块的StackPanel,因此显然,文本块的宽度将根据其中字符串的长度而变化。

    这里已经有几个建议了,答案从“猜测”到 "measure the text size" (如何在不将文本放在ui元素中的情况下在sl中测量文本大小?).

    有人能给我一些主意吗?如果必须的话,我可以迭代所有的数据模板实例,但更好的选择可能是找到最长的字符串并从中进行计算?

    3 回复  |  直到 12 年前
        1
  •  2
  •   Teedee    12 年前

    尚未尝试此操作,但它可以工作: http://thibautvs.com/blog/?p=1775 “关键是将列表框置于具有自动调整大小模式的网格列中。”

        2
  •  0
  •   Denis    14 年前

    列表框使用virtualizingstackpanel作为默认项spanel。因为virtualizingstackpanel只为可见项创建UI元素,所以您可能会看到所描述的行为。要减轻这种行为,您可以尝试设置virtualizingstackpanel.isvirtualizing=“false”或将itemspanel更改为stackpanel。

        3
  •  0
  •   slugster Joey Cai    14 年前

    把这件事搞得一团糟表明,不扩展/重写列表框是不可能的-设置 IsVirtualizing virtualizingstackpanel的属性无效。

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