如何绑定到ListBox的视口宽度(即,没有滚动条的宽度)?

问题描述:

我想绑定到我的ListBox的视口宽度。也就是说,内容区域的宽度,不包括边框或滚动条:如何绑定到ListBox的视口宽度(即,没有滚动条的宽度)?

  • 当垂直滚动条可见时,我希望左边框和滚动条之间的区域宽度;
  • 当垂直滚动条不可见时,我想要左右边框之间的区域宽度。

另外,我可以做一些事情,告诉我垂直滚动条是否可见。

这是为了在列表框之外的控件 - 我想将它放在列表框的视口上方,并确保它始终与视口宽度相同。也就是说,我想将其宽度绑定到ListBox的视口宽度。

+0

可能Dup的:http://*.com/questions/5526217/how-to-get-or-compute-actual-width-of-listbox-without-vertical-scrollbar-if-visib – dugas 2011-04-13 20:36:18

+0

该解决方案使用{ RelativeSource FindAncestor},所以它只能在ListBox(例如在ItemTemplate中)嵌入的控件中,而不是在* outside *之外。 – 2011-04-13 20:52:04

你想要做的是非常具体的ListBox控制模板的内部。在代码隐藏,你可以很容易地找到ScrollViewer,然后你可以使用这些有用的特性:

  • ScrollViewer.ComputedVerticalScrollBarVisibility
  • ScrollViewer.ViewportWidth

控制目标控制的宽度。但是,这种紧密耦合是复合控件的特征,如果您改为覆盖ListBox控件模板并在开始时包含目标控件,则会发现您可以完全访问ScrollViewer及其来自XAML的有用属性,并且可以将宽度与绑定没有所有的问题,试图保持独立控制的原因。

+0

我永远不会想到这件事。好决定。 – 2011-04-14 12:40:12

您可以使用“绑定路径=宽度,元素名称= abc”。

,如果你只是想停靠在另一个顶部的控制,你可以使用电网以及

+1

你甚至理解这个问题吗?我不希望包含边框和滚动条的ListBox的总宽度(和宽度将是错误的,无论如何,你必须使用ActualWidth)。 – 2011-04-14 12:37:57