2011-04-13 85 views
3

我想綁定到我的ListBox的視口寬度。也就是說,內容區域的寬度,不包括邊框或滾動條:如何綁定到ListBox的視口寬度(即,沒有滾動條的寬度)?

  • 當垂直滾動條可見時,我希望左邊框和滾動條之間的區域寬度;
  • 當垂直滾動條不可見時,我想要左右邊框之間的區域寬度。

另外,我可以做一些事情,告訴我垂直滾動條是否可見。

這是爲了在列表框之外的控件 - 我想將它放在列表框的視口上方,並確保它始終與視口寬度相同。也就是說,我想將其寬度綁定到ListBox的視口寬度。

+0

可能Dup的:http://stackoverflow.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

回答

3

你想要做的是非常具體的ListBox控制模板的內部。在代碼隱藏,你可以很容易地找到ScrollViewer,然後你可以使用這些有用的特性:

  • ScrollViewer.ComputedVerticalScrollBarVisibility
  • ScrollViewer.ViewportWidth

控制目標控制的寬度。但是,這種緊密耦合是複合控件的特徵,如果您改爲覆蓋ListBox控件模板並在開始時包含目標控件,則會發現您可以完全訪問ScrollViewer及其來自XAML的有用屬性,並且可以將寬度與綁定沒有所有的問題,試圖保持獨立控制的原因。

+0

我永遠不會想到這件事。好決定。 – 2011-04-14 12:40:12

0

您可以使用「綁定路徑=寬度,元素名稱= abc」。

,如果你只是想停靠在另一個頂部的控制,你可以使用電網以及

+1

你甚至理解這個問題嗎?我不希望包含邊框和滾動條的ListBox的總寬度(和寬度將是錯誤的,無論如何,你必須使用ActualWidth)。 – 2011-04-14 12:37:57