Datagrid自动滚动以使最后一行可见

问题描述 投票:1回答:4

如何使DataGrid始终保持最后一行可见?与添加新项目时自动滚动到底部一样

wpf silverlight
4个回答
3
投票

是,您可以使用方法ScrollIntoView将DataGrid项传递给此方法。

XAML:

<DataGrid x:Name="DataGrid" Grid.Row="1"
          Margin="5"
          AutoGenerateColumns="True"
          ItemsSource="{Binding Path=Users}">

代码:

 private ObservableCollection<User> _users;


    public ObservableCollection<User> Users
    {
        get
        {
            return _users;
        }

        set
        {
            _users = value;
            OnPropertyChanged("Users");
        }
    }

向DataGrid添加新项目:

private void BtnAdd_OnClick(object sender, RoutedEventArgs e)
{
    Users.Add(new User { Id = Guid.NewGuid().ToString(), FirstName = "Bill", LastName = "Clinton" });

    //scroll to last added item
    DataGrid.ScrollIntoView(Users[Users.Count-1]);
}

2
投票

这是使用LoadingRow事件的简单方法:

void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
    dataGrid.ScrollIntoView(e.Row.Item);
}

只需记住在网格加载完成后将其禁用。


0
投票

经过多种尝试,这是最好的方法:

if (datagrid.Items.Count > 0)
            {
                var border = VisualTreeHelper.GetChild(datagrid, 0) as Decorator;
                if (border != null)
                {
                    var scroll = border.Child as ScrollViewer;
                    if (scroll != null) scroll.ScrollToEnd();
                }
            }

0
投票

最简单的方法:

DataGrid.SelectedIndex = DataGrid.Items.Count - 1; // If you need to select the last item
DataGrid.ScrollIntoView(DataGrid.Items[DataGrid.Items.Count - 1]);
© www.soinside.com 2019 - 2024. All rights reserved.