我有一个有很多列的网格,所以有一个很大的水平滚动。我也有服务器分页,所以我只显示前100行。为了加载更多行,我显示一个按钮"加载下一行100行"在网格内。问题是,按钮可能变得不可见,因为它将滚动出视图。这是不好的。我想将其水平位置固定在scrollviewer视口的中心。有什么建议吗?
你看,水平滚动非常大,当用户使用它时,按钮可能会变得不可见。我在最后一行网格上显示按钮,所以当你向下滚动时,你只会在结束时看到按钮。
实际上我已经实现了我想要的东西,但是用肮脏的技巧。我听ScrollViewer.ScrollChanged并在hanler中更新按钮的边距。
private void RulesXamDataGrid_OnScrollChanged(object sender, ScrollChangedEventArgs e)
{
var grid = (XamDataGrid)sender;
var scroll = grid.FindDescendant<ScrollViewer>();
var loadMoreButton = grid.FindElement<Button>(x => x.Name == "loadMoreButton").FirstOrDefault();
if (scroll != null && loadMoreButton != null)
loadMoreButton.Margin =
new Thickness(scroll.HorizontalOffset + (scroll.ViewportWidth - loadMoreButton.ActualWidth) / 2, loadMoreButton.Margin.Top, loadMoreButton.Margin.Right, loadMoreButton.Margin.Bottom);
}
我不喜欢这个实现,所以如果你有更好的(MVVM方式),那就太好了。
答案 0 :(得分:1)
如果你说网格你的意思是DataGrid那么你应该能够标记带附加属性的按钮
SelectiveScrollingGrid.SelectiveScrollingOrientation="None"
这意味着它不会滚动而其他一切都应该
如果不起作用,另一个选项是将它们放入包含的网格中,这样按钮就不再位于滚动查看器内。
<Grid>
<DataGrid>
</DataGrid>
<Button Content="Load More" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>