[英]“Pin” a button inside ScrollViewer
我有一个包含很多列的网格,所以有很大的水平滚动。 另外,我还有服务器分页,因此只显示前100行。 为了加载更多行,我在网格内显示了一个“加载接下来的100行”按钮。 问题在于,按钮可能会变得不可见,因为它将被滚动到视图之外。 这不好。 我想将其水平位置固定在scrollviewer视口的中心。 有什么建议么?
您会看到,水平滚动非常大,当用户使用它时,按钮可能会变得不可见。 我在网格的最后一行显示按钮,所以当您向下滚动时,只有到最后才看到按钮。
实际上,我已经实现了我想要的东西,但是有一个很糟糕的把戏。 我听ScrollViewer.ScrollChanged并在hanler中更新按钮的Margin。
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方法),那就太好了。
如果您说Grid的意思是DataGrid,那么您应该能够将按钮标记为具有附加属性
SelectiveScrollingGrid.SelectiveScrollingOrientation="None"
这意味着它不会滚动,而其他所有内容都应该滚动
如果此方法不起作用,则另一个选择是将它们都放置在一个包含的网格中,以便该按钮不再位于scrollviewer中。
<Grid>
<DataGrid>
</DataGrid>
<Button Content="Load More" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.