使用tab键将重点放在DataGrid中的ComboBox上

时间:2013-11-24 12:16:42

标签: c# wpf datagrid combobox setfocus

我在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中的组合框。

希望你能帮助我:)。

1 个答案:

答案 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中选择一个项目:)