WP7: Размер области просмотра ScrollViewer - PullRequest
3 голосов
/ 07 марта 2012

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

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

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

РЕДАКТИРОВАТЬ: вот 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>

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

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Две вещи:

  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 голосов
/ 07 марта 2012

Без учета вашего XAML это считается - но на основе часто встречающихся проблем

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

...