在添加内容

时间:2015-06-18 22:43:39

标签: windows xaml windows-phone windows-10

我在通用应用中进行了以下设置 -

<ScrollViewer x:Name="ContentScrollViewer"
              Grid.Row="1"
              BringIntoViewOnFocusChange="False">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>

        <ListView x:Name="TopContent" HorizontalAlignment="Stretch" />

        <Grid x:Name="ContentToPin" Grid.Row="1" Height="400" />

        <ListView x:Name="BottomContent" Grid.Row="2" HorizontalAlignment="Stretch" />

    </Grid>
</ScrollViewer>

加载时,不会填充列表视图,并且ContentToPin与屏幕顶部正确对齐。但是,当我开始填充TopContent列表视图时,ContentToPin元素被按下屏幕。

|                        | <- TopContent ListView populated off screen.
|                        |
------------------------- <-Top of screen
|                        |
|                        | <- ContentToPin
|                        |

因此,TopContent在屏幕外加载,然后在ContentToPin中显示一个指示符,指示上面有更多内容,以便用户可以平移以查看TopContent。

在将ContentToPin的上边缘保持在页面顶部的同时填充TopContent ListView的最佳方法是什么?

*注意我不想为TopContent ListView设置高度。

我试图在TopContent ListView上使用SizeChanged事件处理程序来调整ScrollViewers位置,但这只会产生一种不稳定的行为。

   private void TopContentListViewOnSizeChanged(object sender, SizeChangedEventArgs e)
    {
        var heightChange = e.NewSize.Height - e.PreviousSize.Height;
        this.ContentScrollViewer.ChangeView(
            null,
            this.ContentScrollViewer.VerticalOffset + heightChange,
            null,
            false);
    }

1 个答案:

答案 0 :(得分:0)

Grid向下移动屏幕的原因是因为ListView正在增加它的大小,因此正在扩展它的容器RowDefinition。因此,向下推动其他RowDefinition元素。

现在,关于解决问题,我可以想到几件事情,但是不清楚正是你想要在这里实现的目标。尽管如此,这是我的两分钱。

您可以更改Grid并允许其填充 2 RowDefinitions而不是一个,这样可确保内容固定屏幕的顶部。

<Grid x:Name="ContentToPin" Grid.RowSpan="2" Height="400" />

否则,它甚至可能是更好的解决方案来移动父Grid的{​​{1}} ,如下所示:

Grid

请注意,上面的代码只是一个例子。