2013-06-11 43 views
12

沒有人知道這樣的框架上限定了垂直滾動條之間的差:在WPF框架上設置ScrollViewer(用於垂直滾動)的正確方法?

 <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto"> 
      <Frame Name="Frame1" 
        ScrollViewer.CanContentScroll="True" /> 
     </ScrollViewer> 

或這樣的:

 <ScrollViewer Grid.Row="2"> 
      <Frame Name="Frame1" 
        ScrollViewer.VerticalScrollBarVisibility="Auto" 
        ScrollViewer.CanContentScroll="True" /> 
     </ScrollViewer> 

該框架嵌套在web瀏覽器控件並將其設置在第一方式正確顯示垂直滾動條,並僅在需要滾動(自動)時纔可見。當我將它設置爲垂直滾動條的第二種方式時,即使不需要滾動(可見),它也始終可見。

我打算使用第一個選項,因爲它符合我的需求,但如果我設置不正確,我不希望在路上感到驚訝。

謝謝!

回答

26

當您使用ScrollViewer.VerticalScrollBarVisibilityScrollViewer.HorizontalScrollBarVisibility附加屬性時,它對Frame無效。

<ScrollViewer Margin="225.667,-4,0,296.939" HorizontalAlignment="Left" Width="221.667"> 
     <Frame Content="Frame" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Hidden" Source="UserControl2.xaml" Background="#FFDE5454"/> 
</ScrollViewer> 

在以上示例中使用的我既ScrollViewer.VerticalScrollBarVisibilityScrollViewer.HorizontalScrollBarVisibility附加屬性。該代碼的結果與您所期望的完全相反。沒有HorizontalScrollBar可見...並且您仍然可以看到VerticalScrollBar

所以這就是爲什麼這是你應該用什麼

<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto"> 
     <Frame Name="Frame1" /> 
</ScrollViewer> 

當您嘗試此例如用列表框,然後結果將是不同的。

這是下面的代碼結果:

enter image description here

<ScrollViewer Margin="225.667,0,0,12.761" Height="280.178" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="221.667"> 
     <ListBox ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Visible" Background="Orange" ItemsSource="{Binding Collection}" DisplayMemberPath="Property1" /> 
</ScrollViewer> 

這是因爲這些附加屬性,現在內ListBox,而不是父母ScrollViewer影響ScrollViewer中,你可能期望。

因此,從這個小實驗中,我認爲ScrollViewer.VerticalScrollBarVisibility附屬屬性意味着您想要能夠影響ScrollViewer存在於Control的模板中而不是父ScrollViewer的情況。所以我認爲它不起作用,例如DockPanel.Dock,它對父母DockPanel生效。

+0

謝謝,這絕對有幫助! – JDL

相關問題