我在DataGridTemplateColumn中有一个ComboBox:
<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中添加一个新行时,我无法使用键盘从组合框中选择一个项目。
通过调试,我发现当我使用Key Tab来到ComboBox单元格时,不会触发ComboBox.GotFocus。
我尝试强制ComboBox在初始化Combobox时获得焦点,但无法访问代码隐藏oO中的组合框。
希望你能帮助我:)。
答案 0 :(得分:0)
我找到了使用这篇文章的方式:Find a WPF element inside DataTemplate in the code-behind
我只是将FindVisualChildren方法添加到我的类中,并在触发ComboBox_Initialized处理程序时将焦点强制到组合框:
private void comboCarbu_Initialized(object sender, EventArgs e)
{
foreach (var combobox in FindVisualChildren<ComboBox>(dataVoitures))
{
if (combobox.Name == "comboCarbu")
{
combobox.Focus();
}
}
}
现在我可以使用tab键从我的Combobox中选择一个项目:)