Высота ScrollViewer для автоматической прокрутки, когда содержимое переполняет страницу - PullRequest
6 голосов
/ 02 ноября 2009

Хорошо, это будет звучать глупо, но я не могу заставить ScrollViewer работать должным образом. Что мне нужно сделать, это

  1. Для страницы Silverlight используйте 100% ширину / высоту страницы HTML

  2. Имейте элемент управления Height = 160px в верхней части страницы Sliverlight, затем оставьте (100% - 160px) ScrollViewer с динамически меняющимся содержимым.

поэтому на странице HTML у меня есть:

 <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">

затем в XAML:

 <Grid x:Name="LayoutRoot" Height="Auto">
        <StackPanel Orientation="Vertical" Height="Auto">        
            <App:ASilverlightControl  x:Name="Header" Height="160"/>
            <ScrollViewer Name="svw"  HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Visible"  Height="Auto" >
                <StackPanel Orientation="Vertical" x:Name="DynamicContentHere">
              </StackPanel>                                                
            </ScrollViewer>
       </StackPanel>    
   </Grid>

Теперь, что бы я ни пытался, ScrollViewer всегда расширяет / сжимает, чтобы содержать все элементы в StackPanel, даже если это означает переполнение под экраном, но без вертикальной полосы прокрутки.

Единственный способ заставить это работать - это установить Height = 800 для ScrollViewer.

1 Ответ

18 голосов
/ 03 ноября 2009

Если вы поместите ScrollViewer в StackPanel, он никогда не будет работать. StackPanel всегда будет выделять все пространство, необходимое для содержимого ScrollViewer.

Вместо этого вы должны использовать Grid с двумя строками:

<Grid x:Name="LayoutRoot" Height="Auto">
  <Grid.RowDefinitions>
    <RowDefinition Height="160"/>
    <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
  <App:ASilverlightControl x:Name="Header" Grid.Row="0"/>
  <ScrollViewer Name="svw" Grid.Row="1"
    HorizontalScrollBarVisibility="Disabled"
    VerticalScrollBarVisibility="Visible">
    <StackPanel Orientation="Vertical" x:Name="DynamicContentHere">
      ...
    </StackPanel>                                                
   </ScrollViewer>
</Grid>

* во втором RowDefinition автоматически заставит ScrollViewer заполнить как можно больше, но все равно сохранит его внутри вашей визуальной области и, следовательно, заставит работать ScrollViewer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...