2015-12-01 158 views
0

我想保持ScrollViewr數據網格,但它不是滾動時我使用向上和向下箭頭。但是當我試圖用鼠標工作移動滾動條精細。 爲什麼ScrollBar在數據上下移動時沒有移動。請給出您寶貴的建議。這裏是我的代碼DataGrid的滾動條工作不正常

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

作爲一個說明,正常的Key Up和Down事件沒有像期望的那樣運行的原因是因爲你的處理程序。將事件標記爲已處理會導致它不滾動。我不確定通過更改代碼中選定的索引來實現什麼目的,但DataGrid的默認功能已經爲您的鍵盤上下事件遞增/遞減了您選擇的索引。完全移除處理程序會給你與我提供的代碼相同的結果。

+0

非常感謝。你給了我精確的解決方案 – Sagar