2012-03-06 2 views
3

Windows Phone 7. У меня есть ScrollViewer внутри StackPanel внутри PivotItem внутри Pivot. Над ScrollViewer есть некоторые другие элементы управления. Мое намерение состоит в том, что ScrollViewer берет доступную нижнюю часть экрана (~ 400 пикселей), а его содержимое прокручивается по вертикали (высота контента ~ 800 пикселей).WP7: размер видового экрана ScrollViewer

Теперь, сейчас нет вертикальной прокрутки - при попытке перетащить представление возвращается в предыдущей позиции, как если бы размер видового экрана точно соответствовал размеру содержимого. Когда я смотрю на свойство ViewportHeight, это ~ 800px - то же, что и контент.

Высота ScrollViewer не установлена ​​(«Авто»); Я предполагал, что это займет ровно пространство. Это, очевидно, не так. Вопрос: не задано значение Высота вручную, есть ли способ реализовать логику «высота видового экрана - это точно, сколько вертикального пространства у вас осталось»?

EDIT: вот XAML, не относящиеся к делу детали удалены:

<Pivot x:Name="Root"> 
    <ctls:PivotItem> 
     <ctls:PivotItem.Header>Title</ctls:PivotItem.Header> 
     <StackPanel> 

      <!-- More stuff here--> 

      <ScrollViewer Name="MenuPanel" HorizontalScrollBarVisibility="Disabled"> 
        <Canvas x:Name="Menu" HorizontalAlignment="Left" VerticalAlignment="Top"> 
        </Canvas> 
      </ScrollViewer> 
     </StackPanel> 
    </ctls:PivotItem> 
</Pivot> 

Ширина и высота холста устанавливаются в коде.

ответ

3

Две вещи:

  1. StackPanel не позволяет это дети автоматически занимают остальную часть свободного пространства. Вместо этого используйте сетку с определенными строками. Это позволяет вашему ScrollViewer находиться в контейнере, который является точной высотой, оставшейся вертикально.
  2. Ваш холст (внутри ScrollViewer) выровнен сверху и слева и без определенного размера составляет ровно 0 пикселей в высоту и 0 пикселей в ширину.

Удачи.

<Pivot x:Name="Root"> 
    <ctls:PivotItem> 
     <ctls:PivotItem.Header>Title</ctls:PivotItem.Header> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 

      <Grid Grid.Row="0"> 
       <!-- More stuff here--> 
      </Grid> 

      <ScrollViewer 
       Grid.Row="1" 
       Name="MenuPanel"> 

        <Canvas x:Name="Menu" 
          Height="500" 
          Width="500"/> 

      </ScrollViewer> 
     </StackPanel> 
    </ctls:PivotItem> 
</Pivot> 
2

Не видя ваш XAML это assummed - но на основе часто видели проблемы

The ScrollViewer является фактически присвоенные все пространство, это должно включать в себя все это элементы контента.
Либо дайте ему абсолютную высоту, либо оберните ее в сетку, которая ограничит ее доступным пространством в StackPanel.

+1

Просто упаковка в сетку, похоже, не помогает ... –

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