C# 使用tab键将焦点放在DataGrid中的组合框上
我在DataGridTemplateColumn中有一个组合框:C# 使用tab键将焦点放在DataGrid中的组合框上,c#,wpf,datagrid,combobox,setfocus,C#,Wpf,Datagrid,Combobox,Setfocus,我在DataGridTemplateColumn中有一个组合框: <DataGrid x:Name="dataVoitures" Grid.Row="0" AutoGenerateColumns="False" ItemsSource="{Binding ListBagnoles}" CanUserAddRows="False"> <DataGrid.Columns> ...
<DataGrid x:Name="dataVoitures" Grid.Row="0" AutoGenerateColumns="False" ItemsSource="{Binding ListBagnoles}"
CanUserAddRows="False">
<DataGrid.Columns>
...
<DataGridTemplateColumn Header="Carburant" SortMemberPath="Carburant.NomCarburant">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Carburant.NomCarburant}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox x:Name="comboCarbu" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}},
Path=DataContext.ListeCarburants}"
SelectedItem="{Binding Carburant, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="NomCarburant" IsDropDownOpen="True" Initialized="comboCarbu_Initialized"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
...
</DataGrid.Columns>
...
...
问题是,当我在Datagrid中添加新行时,我无法使用键盘从组合框中选择项目
通过调试,我发现当我使用键选项卡访问ComboBox单元格时,ComboBox.GotFocus不会被触发
我尝试在ComboBox初始化时强制ComboBox获得焦点,但无法访问oO背后代码中的ComboBox
希望您能帮助我:)我找到了使用此帖子的方法: 我只是将FindVisualChildren方法添加到我的类中,并在触发combobox\u初始化的处理程序时强制将焦点放在combobox上:
private void comboCarbu_Initialized(object sender, EventArgs e)
{
foreach (var combobox in FindVisualChildren<ComboBox>(dataVoitures))
{
if (combobox.Name == "comboCarbu")
{
combobox.Focus();
}
}
}
private void comboCarbu\u已初始化(对象发送方,事件参数e)
{
foreach(FindVisualChildren(dataVoitures)中的var组合框)
{
if(combobox.Name==“comboCarbu”)
{
combobox.Focus();
}
}
}
现在,我可以使用tab键从组合框中选择一个项目:)您可能对这个问题感兴趣: