2009-10-06 90 views
0

當ItemsControl中的項目溢出其容器時,如何使用觸發器交換模板?如何知道ItemsControl何時溢出其ScrollViewer?

在我當前的實現中,我想根據ItemControl的當前狀態是否如果滾動條可見性設置爲Auto時內容會導致ScrollViwer的滾動條出現,來顯示更簡短的模板形式。所以我對ScrollViewer或ItemsControl中的任何屬性感興趣,這可能會給我一個關於它是否溢出它的ScrollViewer的線索。如果我必須使用一些自定義的ValueConverter來創建一個合理的布爾值來綁定,我想這也沒關係。

+0

以某種方式比較ScrollViewer和ItemsControl的ActualWidth屬性是否有意義?我首先要去那條衚衕,看看我能否得到它的工作。 – jpierson 2009-10-06 23:36:24

+0

也許使用ExtentWidth或ViewportWidth或比較兩者可能會使我找到正確的解決方案。現在正在嘗試。 – jpierson 2009-10-06 23:56:09

回答

1

好吧,所以我最終找出了自己的這一個。

在我的情況下,我使用邏輯滾動而不是物理滾動,因爲我有一個水平佈局,所以我只需要觸發ScrollViewer.ScrollableWidth。在我的情況下得到這個工作的祕訣是確保將ScrollViewer.Horizo​​ntalScrollBarVisibility設置爲Hidden而不是Disabled。這將允許滾動的內容,並將使得scrollableWidth屬性實際上具有有意義的值。

注意: 好奇地設置Horizo​​ntalScrollBarVisibility隱藏似乎摺疊滾動條視覺,因此我不完全確定在這種情況下摺疊和隱藏之間的區別。

+1

所以我發現這種方法存在問題。仔細觀察後,當ScrollViewer的ScrollableWidth屬性更改時,通過更改ItemTemplate來修改ItemsControl的內容將導致ScrollableWidth再次更改以適應模板中的更改,從而啓動無限循環綁定依賴關係。如果有解決方法,那麼我的解決方案仍然有效,否則我想我仍然在尋找替代解決方案。 – jpierson 2009-10-07 13:00:01