2015-12-01 3 views
0

Я пытаюсь держать ScrollViewr к DataGrid, но его не прокрутки, когда я использую стрелки вверх и вниз .Но Когда я пытаюсь переместить ScrollBar с мыши его рабочего хорошо. Почему ScrollBar не перемещается при перемещении данных вверх и вниз. Пожалуйста, дайте свои ценные предложения. Вот мой кодDataGrid 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

отправьте код обработчика – Usama

+0

@SamTheDev Я разместил код обработчика, пожалуйста, проверьте – Sagar

+0

У вас есть проблема с ответом? Поместите контрольную точку в обработчик и пройдите через код, когда он запустится, чтобы увидеть, что на самом деле происходит ... затем вернитесь сюда и обновите свой вопрос. – Sheridan

ответ

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; 
     } 
    } 

Обратите внимание, что обычные события «Ключ вверх и вниз» не функционируют, как ожидалось, из-за вашего обработчика. Маркировка события, как обрабатывается, не позволяет прокручивать. Я не уверен, что вы пытаетесь выполнить, изменив выбранный индекс в коде, но функциональность по умолчанию DataGrid уже увеличивает/уменьшает ваш выбранный индекс для событий «вверх и вниз». Удаление обработчика полностью даст вам тот же результат, что и код, который я предоставил.

+0

Большое вам спасибо. вы дали мне Exact Solution – Sagar

Смежные вопросы