У меня есть WPF DataGrid
, размещенный на Window
. У меня есть кнопка, которая выполняет некоторую бизнес-логику и заполняет сетку.
Я хочу установить фокус на DataGrid
(желательно первую строку в DataGrid), когда i TAB
от кнопки. Я установил TabIndex
, но почему-то фокус не приходит на DataGrid.
Соответствующая часть XAML формы находится здесь:
<StackPanel Orientation="Vertical" Grid.Column="2" Margin="20,10,10,10">
<Button Content="Search"
Height="25" HorizontalAlignment="Right" Margin="0,-25,0,0"
Name="btnSearch" VerticalAlignment="Top" Width="75" **TabIndex="1300"** Click="btnSearch_Click" Keyboard.KeyDown="btnSearch_PreviewKeyDown" LostFocus="btnSearch_LostFocus"/>
</StackPanel>
<DataGrid AutoGenerateColumns="False" Grid.Column="1" Margin="20,160,10,10" Name="dataGridOrganisations" **TabIndex="1400"**
BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Focusable="True"
ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" GridLinesVisibility="None"
ItemsSource="{Binding}" CanUserReorderColumns="False" CanUserResizeRows="False" IsReadOnly="True" SelectionChanged="dataGridOrganisations_SelectionChanged" Keyboard.PreviewKeyDown="dataGridOrganisations_PreviewKeyDown" >
<DataGrid.Columns>
<DataGridTextColumn Header="Shortname" Width="100" Binding="{Binding ShortName}" />
<DataGridTextColumn Header="Internal Code" Width="100" Binding="{Binding LocalID}"/>
<DataGridTextColumn Header="Name" Width="*" Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
Когда я добавил следующий код для события LostFocus
Баттона, он выделяет первую строку. Но когда я использую клавишу со стрелкой «вниз», чтобы выбрать следующую строку в сетке; вместо перехода к следующему ряду сначала устанавливается фокус на кнопке «Поиск», а в следующий раз - ко второму ряду!
if (this.dataGridOrganisations != null && this.dataGridOrganisations.HasItems)
{
this.dataGridOrganisations.Focus();
if (dataGridOrganisations.Items != null && dataGridOrganisations.Items.Count > 0)
{
DataGridRow firstRow = this.dataGridOrganisations.ItemContainerGenerator.ContainerFromItem(dataGridOrganisations.Items[0]) as DataGridRow;
if (firstRow != null)
{
firstRow.IsSelected = true;
}
}
}
Как установить фокус на DataGrid (или его первой строке)? Почему TabIndex
не работает здесь?