繁体   English   中英

“固定” ScrollViewer中的一个按钮

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM