【问题标题】:DataGrid ComboBox open with one clickDataGrid ComboBox 一键打开
【发布时间】:2017-06-21 06:34:16
【问题描述】:

我有一个包含五列的数据网格。第 1、2 和 3 列是用户可以输入的 TextColumns。第 4 和 5 列是 ComboBox:

<DataGrid x:Name="myTable" DataGridCell.Selected="grd_Cells_Selected" SelectionUnit="Cell"  AutoGenerateColumns="False" ColumnWidth="*" Margin="5,0,0,0" Height="Auto" VerticalAlignment ="Center" HorizontalAlignment="Center" ItemsSource="{Binding mySourceCollection}">

    <DataGrid.Resources>
        <DataTemplate x:Key="myTemplate1" DataType="vm:GridItem" >
            <ComboBox SelectedValue="{Binding something, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding sometging}" DisplayMemberPath="desc"/>
        </DataTemplate>
        <DataTemplate x:Key="myTemplate2" DataType="vm:GridItem">
            <ComboBox x:Name="cboMY" SelectedValue="{Binding something, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="desc" ItemsSource="{Binding something}" IsSynchronizedWithCurrentItem="True"/>
        </DataTemplate>
    </DataGrid.Resources>

    <DataGrid.Columns>
        <DataGridTextColumn Header="H1" Binding="{Binding h1}" />
        <DataGridTextColumn Header="H2" Binding="{Binding h2}" />
        <DataGridTextColumn Header="H3" Binding="{Binding h3}" />
        <DataGridTemplateColumn Header="Combo1" CellTemplate="{StaticResource myTemplate1}" CellEditingTemplate="{StaticResource myTemplate1}"  />
        <DataGridTemplateColumn Header="Combo2" CellTemplate="{StaticResource myTemplate2}" CellEditingTemplate="{StaticResource myTemplate2}" />
    </DataGrid.Columns>

 </DataGrid>

我用

DataGridCell.Selected="grd_Cells_Selected"

使用以下 CodeBehind 使单元格一键选中:

private void grd_Cells_Selected(object sender, RoutedEventArgs e) {
    if (e.OriginalSource.GetType() == typeof(DataGridCell)) {
        // Starts the Edit on the row;
        DataGrid grd = (DataGrid)sender;
        grd.BeginEdit(e);
    }
}

这不适用于组合框。我必须单击两次才能打开 ComboBox。有没有办法一键打开ComboBox?

【问题讨论】:

    标签: c# wpf xaml combobox datagrid


    【解决方案1】:

    将 DataGridView 控件的“EditMode”属性更改为“EditOnEnter”。不过这会影响所有列。

    【讨论】:

    • 不明白。我不使用 DataGridView 标记,并且在我的 XAML 中没有使用 EditMode 的选项
    【解决方案2】:

    找到了解决方法。不漂亮,但到目前为止它有效:

    我通过获取我点击的当前列扩展了 grd_Cells_Selected():

    int col = PNTable.SelectedCells[0].Column.DisplayIndex;
    

    现在我只说 grd.BeginEdit(e) 如果当前列是 DataDridTerxtColumns 之一

    到目前为止的全部代码:

    private void grd_Cells_Selected(object sender, RoutedEventArgs e) {
    
        int col = PNTable.SelectedCells[0].Column.DisplayIndex;
        if (col <= 2) {
            if (e.OriginalSource.GetType() == typeof(DataGridCell)) {
                // Starts the Edit on the row;
                DataGrid grd = (DataGrid)sender;
                grd.BeginEdit(e);
            }
        }
    }
    

    如果有人有更聪明的解决方案,我会很高兴

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2014-07-27
      • 2011-04-18
      • 2011-02-28
      • 2022-01-11
      • 2020-07-20
      • 2021-07-07
      相关资源
      最近更新 更多