2013-06-11 2 views
12

ли кто-нибудь знает разницу между определения вертикальной полосы прокрутки на раме, как это:Правильный способ установки ScrollViewer (для вертикальной прокрутки) на кадре WPF?

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

Этот кадр вложен в элементе управления WebBrowser и установив его в первый путь правильно отображает вертикальную полосу прокрутки и отображается только тогда, когда требуется прокрутка (авто). Когда я устанавливаю его вторым способом, вертикальная полоса прокрутки работает, но всегда видна, даже если ей не нужно прокручивать (видимо).

Я собираюсь использовать первый вариант, потому что он соответствует моим потребностям, но я не хочу удивляться, если я неправильно его установлю.

Спасибо!

ответ

26

Когда вы используете ScrollViewer.VerticalScrollBarVisibility или ScrollViewer.HorizontalScrollBarVisibility приложенное свойство, оно не имеет эффекта с рамкой.

<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.VerticalScrollBarVisibility и ScrollViewer.HorizontalScrollBarVisibility вложенных свойств. исход этого кода является полной противоположностью тому, что вы ожидаете. Нет HorizontalScrollBar видно ... и вы все еще можете увидеть VerticalScrollBar.

Так вот почему это то, что вы должны использовать

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

Когда вы попробуете это, например, с ListBox, то результат будет отличаться.

Это результат следующего кода:

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> 

Это потому, что эти вложенные свойства в настоящее время влияют на ScrollViewer в ListBox, а не родителей ScrollViewer как вы можете ожидать.

Так из этого небольшого эксперимента я предполагаю, что ScrollViewer.VerticalScrollBarVisibility вложенного свойства предназначено для случаев, когда вы хотите, чтобы иметь возможность влиять на ScrollViewer, которая существует в шаблоне элемента управления, а не родитель ScrollViewer. Поэтому я думаю, что это не работает, например, как DockPanel.Dock, который вступает в силу с родителем DockPanel.

+0

Спасибо, это определенно помогает! – JDL

Смежные вопросы