2013-06-11 20 views
12

qualcuno sa la differenza tra definente una barra di scorrimento verticale su un frame del tipo:Modo corretto per impostare ScrollViewer (per lo scorrimento verticale) su un frame WPF?

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

o simili:

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

Questo telaio è annidato in un controllo WebBrowser e impostando così il primo modo visualizza correttamente la barra di scorrimento verticale ed è visibile solo quando è necessario scorrere (auto). Quando lo imposto nel secondo modo, la barra di scorrimento verticale funziona ma è sempre visibile anche quando non è necessario scorrere (visibile).

Ho intenzione di utilizzare la prima opzione perché soddisfa le mie esigenze, ma non voglio essere sorpresa in fondo alla strada se la sto impostando in modo errato.

Grazie!

risposta

26

Quando si utilizza la proprietà associata ScrollViewer.VerticalScrollBarVisibility o ScrollViewer.HorizontalScrollBarVisibility, non ha effetto con 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> 

Nell'esempio sopra ho usato entrambe proprietà associate ScrollViewer.VerticalScrollBarVisibility e ScrollViewer.HorizontalScrollBarVisibility. l'esito di quel codice è l'esatto opposto di quello che ti aspetteresti. Non è visibile HorizontalScrollBar ... e puoi ancora vedere VerticalScrollBar.

Ecco perché questo è ciò che si dovrebbe usare

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

Quando si tenta questo per esempio con ListBox poi risultato sarà diverso.

Questo è il risultato di codice seguente:

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> 

Questo perché quelle proprietà associate ora influenzano ScrollViewer all'interno ListBox e non genitore ScrollViewer come ci si potrebbe aspettare.

Quindi da questo piccolo esperimento presumo che ScrollViewer.VerticalScrollBarVisibility proprietà associata è pensato per i casi in cui si desidera essere in grado di influenzare ScrollViewer che esiste all'interno del modello di controllo e non genitore ScrollViewer. Quindi penso che non funzioni per esempio come DockPanel.Dock che ha effetto sul genitore DockPanel.

+0

Grazie, questo sicuramente aiuta! – JDL