我或多或少地被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中的重點
- ArrowUp結果,並重點都到了一定TexBox在窗戶的某個地方。
- 如果我點擊一行兩次,然後點擊ArrowUp,SignalTableKeyUp()處理程序被調用一次,則DataGrid的SelectedIndex被該處理程序中的一個刪除,但DataGrid中的選定行減少2!當我再次點擊ArrowUp時,文本框會收到焦點...。
- 如果我點擊一行兩次,然後點擊ArrowDown,SignalTableKeyUp()處理程序將被調用一次,DataGrid的SelectedIndex會添加一個處理程序,但DataGrid中的選定行增加2!當我再次點擊ArrowDown時,選定的行增加1(如預期的那樣)。
任何人都知道這裏發生了什麼,或者有解決方案嗎?