【问题标题】:How to get or compute actual width of ListBox without Vertical Scrollbar if visible如果可见,如何在没有垂直滚动条的情况下获取或计算 ListBox 的实际宽度
【发布时间】:2011-07-28 10:15:15
【问题描述】:

我想知道如果没有垂直滚动条可见,如何获取或计算ListBox的实际宽度。

我想要做的是改变 ListBox 内每个项目的宽度而不被 垂直滚动条覆盖。

Width="{Binding ActualWidth, 
    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}

至少,上面的绑定告诉我ListBox的实际宽度,但是这个不处理垂直滚动条的宽度。

有什么好办法解决这个问题吗?

【问题讨论】:

    标签: wpf binding listbox scrollbar


    【解决方案1】:

    尝试绑定到包含ScrollViewerViewportWidth 属性。

    像这样:

    Width="{Binding Path=ViewportWidth, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ScrollViewer}}"
    

    【讨论】:

    • 请注意,这绑定到 CONTAINING ScrollViewer 的 ViewportWidth,而不是内部的。虽然您可以在 ScrollViewer 中包装 ListBox 而不会产生不良后果,但如果您使用 TreeView 执行此操作,它似乎会禁用 UI 虚拟化,这可能会导致许多项目出现性能问题。
    【解决方案2】:

    也许默认值会帮助你:根本不要设置Width

    至少在我的情况下,不设置Width 属性就足够了。虽然 Mårten Wikström 的回答是完全正确的,但我发现我的实际问题是我指定(不必要地)Width 并且以错误的方式执行此操作(与 Aki24x 报告的方式相同)。

    这是我的示例的简化案例。解决方案是删除第 4 行。

    1  <ListBox.ItemTemplate>
    2      <DataTemplate>
    3          <Border
    4              Width="..." 
    5              >
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-09
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多