【问题标题】:Get focus on a ComboBox in DataGrid with tab key使用 Tab 键关注 DataGrid 中的 ComboBox
【发布时间】:2013-11-24 12:16:41
【问题描述】:

我在 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 初始化但无法访问代码隐藏 oO 中的组合框时强制 ComboBox 获得焦点。

希望你能帮助我:)

【问题讨论】:

标签: c# wpf datagrid combobox setfocus


【解决方案1】:

我找到了使用这篇文章的方法: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 中选择一个项目 :)

【讨论】:

    猜你喜欢
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2019-02-17
    • 2020-05-14
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多