我在通用应用中进行了以下设置 -
<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);
}
答案 0 :(得分:0)
Grid
向下移动屏幕的原因是因为ListView
正在增加它的大小,因此正在扩展它的容器RowDefinition
。因此,向下推动其他RowDefinition
元素。
现在,关于解决问题,我可以想到几件事情,但是不清楚正是你想要在这里实现的目标。尽管如此,这是我的两分钱。
您可以更改Grid
并允许其填充 2 RowDefinitions
而不是一个,这样可确保内容固定屏幕的顶部。
<Grid x:Name="ContentToPin" Grid.RowSpan="2" Height="400" />
否则,它甚至可能是更好的解决方案来移动父Grid
的{{1}} ,如下所示:
Grid
请注意,上面的代码只是一个例子。