2013-06-11 17 views
12

weiß jemand den Unterschied eine vertikale Bildlaufleiste auf einem Rahmen, wie dies zwischen der Definition:Korrekter Weg zum Einstellen von ScrollViewer (für vertikales Scrollen) auf einem WPF-Frame?

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

oder so:

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

Dieser Rahmen in einem WebBrowser-Steuerelement verschachtelt ist und es die erste Art und Weise einstellen zeigt die vertikale Bildlaufleiste korrekt an und ist nur sichtbar, wenn ein Bildlauf erforderlich ist (automatisch). Wenn ich es auf die zweite Art einstelle, funktioniert die vertikale Bildlaufleiste, ist aber immer sichtbar, auch wenn sie nicht scrollen muss (sichtbar).

Ich werde die erste Option verwenden, weil sie meine Bedürfnisse erfüllt, aber ich möchte nicht überrascht sein, wenn ich sie falsch einstelle.

Danke!

Antwort

26

Wenn Sie ScrollViewer.VerticalScrollBarVisibility oder ScrollViewer.HorizontalScrollBarVisibility angefügte Eigenschaft verwenden, hat es keine Wirkung mit 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> 

oben in Beispiel I verwendet, sowohl ScrollViewer.VerticalScrollBarVisibility und ScrollViewer.HorizontalScrollBarVisibility angebracht Eigenschaften. Ergebnis dieses Codes ist das genaue Gegenteil von dem, was Sie erwarten würden. Es ist keine HorizontalScrollBar sichtbar ... und Sie können immer noch VerticalScrollBar sehen.

Also das ist, warum das, was Sie

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

verwenden sollten Wenn Sie dies mit List-Box zum Beispiel versuchen, dann wird zur Folge haben anders.

Dies ist das Ergebnis der folgenden Code:

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> 

Das ist, weil diese angefügten Eigenschaften jetzt innerhalb Scroll ListBox und nicht die Eltern beeinflussen ScrollViewer wie man es erwarten kann.

Also von diesem kleinen Experiment Ich gehe davon aus, dass ScrollViewer.VerticalScrollBarVisibility angebracht Eigenschaft für die Fälle gemeint, in dem Sie in der Lage sein wollen ScrollViewer zu beeinflussen, die im Control Vorlage vorhanden ist und nicht die Eltern ScrollViewer. Also ich denke, es funktioniert nicht zum Beispiel als DockPanel.Dock, die auf Eltern DockPanel wirkt.

+0

Danke, das hilft definitiv! – JDL