滚动ListView - 需要屏幕高度检测

时间:2017-02-02 15:10:24

标签: xaml

我正在开发一个包含listview的WinRT应用程序。 Listview最近有所增长,我需要在它周围放置一个垂直滚动条。 到目前为止,我已经将网格中的高度硬编码为500。 但是我想知道如何设置高度以检测可用空间。这可能因所使用的设备而异。我该怎么做?

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="500"/>
    </Grid.RowDefinitions>

    <StackPanel Grid.Row="0" Orientation="Horizontal">
        <TextBlock Text="*" FontSize="40" FontWeight="Bold" Foreground="Red"/>
        <TextBlock Text=" = Required " FontSize="20"/>   
    </StackPanel>
    <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" >
    <ListView 
        ItemsSource="{Binding Path=Survey.SelectedSection.Questions, Mode=TwoWay}"
        IsSwipeEnabled="False"
        SelectionMode="None"
        Background="White"
        ItemTemplateSelector="{StaticResource ResourceKey=QuestionDisplay}"
        ItemContainerStyle=
            "{StaticResource ResourceKey=QuestionListViewItemContainerStyle}" />
    </ScrollViewer>
</Grid>

1 个答案:

答案 0 :(得分:1)

就像我们讨论过的那样。 ListView在其模板中嵌入了ScrollViewer个alread。之所以使用固定高度而不是自然地调用滚动的原因是提供了一个固定的边界来调用它。

通过调整布局,使其父级面板(以及父级树)不包括StackPanel,而使用Grid代替星级*,可以调整边界它是所希望的。这样做的原因是StackPanel只会消耗所需的空间,而不管可用的空间。 Grid将消耗所提供的任何空间,同时将其子项限制在其布局中,从而提供调用嵌入ScrollViewer的滚动所必需的边界,该ScrollViewer.VerticalScrollBarVisibility的附加属性设置为Auto {{1}} 1}}默认情况下。

很高兴你找到了你的修复,欢迎来到XAML的精彩世界,一旦你习惯了它,你通常会发现它比它的堂兄HTML更容易使用。干杯:)