【发布时间】:2011-11-25 19:00:27
【问题描述】:
我将 WPF DataGrid 放在 Window 上。我有一个按钮,它执行一些业务逻辑并填充网格。
当我从按钮TAB 时,我想将焦点设置在DataGrid(最好是DataGrid 中的第一行)。我已经设置了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>
当我在 Button 的 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 在这里不起作用?
【问题讨论】:
-
请通过 cmets 了解 H.B. 的答案。问题在 H.B. 之后得到解决。指出不需要 TabIndex。在 Button 控件的 StackPanel 中移动 DataGrid 解决了这个问题。
标签: c# wpf xaml wpf-controls wpfdatagrid