"管脚和#34; ScrollViewer中的一个按钮

时间:2014-11-21 14:59:23

标签: c# wpf xaml

我有一个有很多列的网格,所以有一个很大的水平滚动。我也有服务器分页,所以我只显示前100行。为了加载更多行,我显示一个按钮"加载下一行100行"在网格内。问题是,按钮可能变得不可见,因为它将滚动出视图。这是不好的。我想将其水平位置固定在scrollviewer视口的中心。有什么建议吗?

Screenshot of what needs to be done

你看,水平滚动非常大,当用户使用它时,按钮可能会变得不可见。我在最后一行网格上显示按钮,所以当你向下滚动时,你只会在结束时看到按钮。

实际上我已经实现了我想要的东西,但是用肮脏的技巧。我听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方式),那就太好了。

1 个答案:

答案 0 :(得分:1)

如果你说网格你的意思是DataGrid那么你应该能够标记带附加属性的按钮

SelectiveScrollingGrid.SelectiveScrollingOrientation="None"

这意味着它不会滚动而其他一切都应该

如果不起作用,另一个选项是将它们放入包含的网格中,这样按钮就不再位于滚动查看器内。

<Grid>
    <DataGrid>

    </DataGrid>
    <Button Content="Load More" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>