2009-09-17 73 views
0

我在一個ItemsControl周圍的wpf中有一個滾動條,它只在列表長度大於窗口大小時纔可見。但是,當它被隱藏時,滾動條應該是空白的空白區域。如何在wpf中不顯示滾動條時展開窗口內容?

我該如何刪除這個空間,然後「摺疊」滾動條?

<ScrollViewer VerticalScrollBarVisibility="Auto" 
       HorizontalAlignment="Stretch" 
       HorizontalContentAlignment="Left" 
       VerticalContentAlignment="Top" 
       HorizontalScrollBarVisibility="Disabled"> 
    <ItemsControl ItemsSource="{Binding Path=ContactGroups}" 
        Width="Auto" 
        MinWidth="231" 
        MinHeight="342" 
        ScrollViewer.VerticalScrollBarVisibility="Disabled" 
        Height="Auto" 
        HorizontalContentAlignment="Left" 
        VerticalContentAlignment="Top" 
        HorizontalAlignment="Stretch"> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <c:ContactGroupControl /> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</ScrollViewer> 
+0

無法重現。你可以張貼截圖嗎? – 2009-09-17 13:24:25

回答

0

你實際上已經打在你的問題的答案。

您需要將滾動條的狀態設置爲Collapsed,而不是Invisible

scrollbar.Visibility = Collapsed; 

這將刪除元素,而不僅僅是隱藏它,並保留在UI爲它的空間。

+0

什麼處理程序可以鉤入來設置?目前WPF爲我處理它,因爲我設置VerticalScrollBarVisibility =「自動」...是否有OnScrollBarVisibilityChanged事件或類似? – bluebit 2009-09-17 12:31:12

1

當滾動條的可見性發生變化時,不會引發任何事件,但可能會掛鉤到VerticalScrollBarVisibility和/或Horizo​​ntalScrollBarVisibility依賴項屬性的更改通知。也許你可以使用這個小片段。

DependencyPropertyDescriptor scrollbarDesc = 
    DependencyPropertyDescriptor.FromProperty 
    (ScrollViewer.VerticalScrollBarVisibilityProperty, typeof(Visibility)); 

if (scrollbarDesc != null) 
{ 
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate 
    { 
     // Add your propery changed logic here... 
    }); 
} 
+0

謝謝你!這絕對看起來很有希望當我在粘貼的第一行上運行該事件時出現異常: ArgumentException:'可見性'類型沒有匹配的DependencyObjectType。 – bluebit 2009-09-18 08:54:57

+0

我試着改變ScrollBarVisibility的可見性,它實際上是,但仍然得到相同的錯誤.... – bluebit 2009-09-18 09:00:02

1

Trainee4Life有這個想法,但你只需要掛接到一個不同的屬性[ScrollViewer.ComputedVerticalScrollBarVisibilityProperty]和更改的typeof(Visisbility)到typeof運算(的ScrollViewer)。

DependencyPropertyDescriptor scrollbarDesc = 
    DependencyPropertyDescriptor.FromProperty 
    (ScrollViewer.ComputedVerticalScrollBarVisibilityProperty, typeof(ScrollViewer)); 

if (scrollbarDesc != null) 
{ 
    scrollbarDesc.AddValueChanged(scrollViewer1, delegate 
    { 
     // Add your propery changed logic here... 
    }); 
}