如何使DataGrid始终保持最后一行可见?与添加新项目时自动滚动到底部一样
是,您可以使用方法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]);
}
这是使用LoadingRow事件的简单方法:
void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
dataGrid.ScrollIntoView(e.Row.Item);
}
只需记住在网格加载完成后将其禁用。
经过多种尝试,这是最好的方法:
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();
}
}
最简单的方法:
DataGrid.SelectedIndex = DataGrid.Items.Count - 1; // If you need to select the last item
DataGrid.ScrollIntoView(DataGrid.Items[DataGrid.Items.Count - 1]);