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

时间:2011-04-13 20:33:04

标签: wpf layout binding

我想绑定到我的ListBox的视口宽度。也就是说,内容区域的宽度,不包括边框或滚动条:

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

或者,我可以用一些东西来告诉我垂直滚动条当前是否可见。

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

2 个答案:

答案 0 :(得分:3)

您想要做的是非常特定于ListBox控件模板的内部。在代码隐藏中,您可以轻松找到ScrollViewer,然后您可以使用这些有用的属性:

  • ScrollViewer.ComputedVerticalScrollBarVisibility
  • ScrollViewer.ViewportWidth

控制目标控件的宽度。但是这种紧密耦合是复合控件的特征,如果您覆盖ListBox控件模板并在开头包含目标控件,您会发现您可以完全访问ScrollViewer及其有用的属性从XAML开始,您可以将宽度与绑定相关联,而不会出现试图维护独立控件的所有问题。

答案 1 :(得分:0)

您可以使用“binding Path = Width,ElementName = abc”。

如果您只想将控件停靠在另一个控件的顶部,您也可以使用Grid