我正在尝试将 ScrollViewr 保留到 datagrid ,但是当我使用向上和向下箭头时它不会滚动。但是当我尝试使用鼠标移动ScrollBar工作正常。 为什么ScrollBar在数据上下移动时没有移动。请提供宝贵的建议。这是我的代码
<DataGrid x:Name="dgsuggest" ScrollViewer.VerticalScrollBarVisibility="Auto"
IsReadOnly="True" AutoGenerateColumns="False"ItemsSource="{Binding}"
PreviewKeyDown="dgsuggest_PreviewKeyDown" SelectedIndex="0">
我的处理程序代码如下
private void dgsuggest_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key==Key.Down)
{
if (dgsuggest.Items.Count - 1 > dgsuggest.SelectedIndex)
dgsuggest.SelectedIndex++;
e.Handled = true;
}
else if (e.Key == Key.Up)
{
if (dgsuggest.SelectedIndex > 0)
dgsuggest.SelectedIndex--;
e.Handled = true;
}
}
答案 0 :(得分:0)
DataGrid不滚动的原因是因为您只是更改选择。如果要更改视图中的项目,可以在更改选择后使用DataGrid.ScrollIntoView。调用此方法并提供新选择的对象将在调整视图时移动ScrollBar。
private void dgsuggest_PreviewKeyDown( object sender, KeyEventArgs e )
{
var datagrid = sender as DataGrid;
if( datagrid == null ) return;
if( e.Key == Key.Down )
{
if( datagrid.Items.Count - 1 > datagrid.SelectedIndex )
datagrid.SelectedIndex++;
datagrid.ScrollIntoView( datagrid.SelectedItem );
e.Handled = true;
}
else if( e.Key == Key.Up )
{
if( datagrid.SelectedIndex > 0 )
datagrid.SelectedIndex--;
datagrid.ScrollIntoView( datagrid.SelectedItem );
e.Handled = true;
}
}
请注意,正常的Key Up和Down事件无法正常运行的原因是因为您的处理程序。将事件标记为已处理导致其不滚动。我不确定您要通过更改代码中的选定索引来完成什么,但DataGrid的默认功能已经为关键的向上和向下事件增加/减少所选索引。完全删除处理程序将为您提供与我提供的代码相同的结果。