2013-06-11 34 views
12

czy ktoś zna różnicę między definiowania pionowy pasek przewijania na ramie jak ten:Prawidłowy sposób ustawiania ScrollViewer (do przewijania w pionie) na ramce WPF?

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

lub tak:

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

Ta ramka jest zagnieżdżony w formancie WebBrowser oraz wyznacza pierwszą drogę poprawnie wyświetla pionowy pasek przewijania i jest widoczny tylko wtedy, gdy trzeba przewijać (automatycznie). Po ustawieniu go w drugi sposób działa pionowy pasek przewijania, ale jest zawsze widoczny, nawet gdy nie trzeba przewijać (widoczny).

mam zamiar używać 1st opcję, ponieważ spełnia moje potrzeby, ale nie chcę być zaskoczony w dół drogi, jeśli jestem ustawienie go nieprawidłowo.

Dzięki!

Odpowiedz

26

Podczas korzystania z dołączonej właściwości ScrollViewer.VerticalScrollBarVisibility nie ma ona wpływu na ramkę.

<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> 

W powyższym przykładzie I stosuje się zarówno ScrollViewer.VerticalScrollBarVisibility i ScrollViewer.HorizontalScrollBarVisibility dołączone właściwości. wynik tego kodu jest dokładnym przeciwieństwem tego, czego można oczekiwać. Nie ma HorizontalScrollBar ... widoczne i nadal można zobaczyć VerticalScrollBar.

Więc dlatego to, co należy użyć

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

Podczas próby to na przykład z ListBox wtedy wynik będzie inny.

Wynika to z następującego kodu:

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> 

To dlatego, że te dołączone właściwości teraz wpłynąć ScrollViewer ciągu ListBox a nie rodzica ScrollViewer jak można oczekiwać.

Więc z tego małego eksperymentu Zakładam, że ScrollViewer.VerticalScrollBarVisibility dołączony nieruchomość jest przeznaczona dla przypadków, w których chcesz, aby móc wpływać ScrollViewer który istnieje w szablonie Control, a nie rodzica ScrollViewer. Więc myślę, że to nie działa na przykład jako DockPanel.Dock który wchodzi w życie rodzica DockPanel.

+0

Dzięki, to na pewno pomoże! – JDL