2017-09-02 96 views
0

我或多或少地被DataGrid行爲嚇倒了。我的應用程序有幾個用於輸入的TexBox,結合在一個Grid中,並且在該Grid之外,我有一個DataGrid來顯示事物。 DataGrid的風格是A S如下:WPF DataGrid導航:ArrowUp鍵專注於文本框

<Style x:Key="SignalsTable" TargetType="{x:Type DataGrid}"> 
    <Setter Property="HorizontalAlignment" Value="Stretch"/> 
    <Setter Property="VerticalAlignment" Value="Top"/> 
    <Setter Property="AutoGenerateColumns" Value="False"/> 
    <Setter Property="SelectionUnit" Value="FullRow"/> 
    <Setter Property="SelectionMode" Value="Extended"/> 
    <Setter Property="CanUserAddRows" Value="False"/> 
    <Setter Property="CanUserDeleteRows" Value="False"/> 
    <Setter Property="CanUserReorderColumns" Value="False"/> 
    <Setter Property="CanUserResizeColumns" Value="False"/> 
    <Setter Property="CanUserResizeRows" Value="False"/> 
    <Setter Property="IsReadOnly" Value="True"/> 
    <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"/> 
    <Setter Property="VerticalScrollBarVisibility" Value="Auto"/> 
</Style> 

DataGrid中的部分XAML:

<DataGrid x:Name="MT_Raster_SignalsTable" 
      ItemsSource="{Binding Source={StaticResource SignalsCollectionViewSource}}" 
      Margin="20,240,20,20" 
      Style="{StaticResource SignalsTable}" 
      KeyboardNavigation.DirectionalNavigation="None" 
      PreviewKeyUp="SignalTableKeyUp"> 
    <DataGrid.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="BorderThickness" Value="0"/> 
      <Setter Property="FocusVisualStyle" Value="{x:Null}"/> 
     </Style> 
    </DataGrid.CellStyle> 
    <DataGrid.Columns> 

,其餘的列定義。

我只是無法使用箭頭鍵進行「正常」導航工作(KeyboardNavigation.DirectionalNavigation =「Continue」有時導致在ArrowUp/Down時通過表進行大型跳轉),所以我設置了「KeyboardNavigation.DirectionalNavigation =」沒有「,並且附加了一個鍵盤處理程序來在SignalTableKeyUp()中自己做一些事情。這很適合家庭(表頂部)和結束(表底),但ArrowUp /下仍然有奇怪的行爲:在失去了DataGrid中的重點

  1. ArrowUp結果,並重點都到了一定TexBox在窗戶的某個地方。
  2. 如果我點擊一行兩次,然後點擊ArrowUp,SignalTableKeyUp()處理程序被調用一次,則DataGrid的SelectedIndex被該處理程序中的一個刪除,但DataGrid中的選定行減少2!當我再次點擊ArrowUp時,文本框會收到焦點...。
  3. 如果我點擊一行兩次,然後點擊ArrowDown,SignalTableKeyUp()處理程序將被調用一次,DataGrid的SelectedIndex會添加一個處理程序,但DataGrid中的選定行增加2!當我再次點擊ArrowDown時,選定的行增加1(如預期的那樣)。

任何人都知道這裏發生了什麼,或者有解決方案嗎?

回答

0

好吧,我嘗試了一些東西,解決方案顯然很簡單...現在,我自己處理預覽鍵,自己做選擇更改,然後將事件設置爲「處理」,以便不執行其他操作按鍵:

private void SignalTableKeyDown(object sender, KeyEventArgs e) 
{ 
    // Do selection stuff in DataGrid. 

    // Prevent any other actions. 

    e.Handled = true; 
}