如何在(WPF)datagridcomboboxcolumn中扩展组合?[英] How to expand the ComboBox in a (WPF) DataGridComboBoxColumn?

本文是小编为大家收集整理的关于如何在(WPF)datagridcomboboxcolumn中扩展组合?的处理方法,想解了如何在(WPF)datagridcomboboxcolumn中扩展组合?的问题怎么解决?如何在(WPF)datagridcomboboxcolumn中扩展组合?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

在我的C#WPF应用程序(.NET 4.0)中,我有一个来自代码的数据杂志,包括datagridcomboboxcolumn:

public static DataGridComboBoxColumn getCboCol(string colName, Binding textBinding)
{
    List<string> statusItemsList = new StatusList();

    DataGridComboBoxColumn cboColumn = new DataGridComboBoxColumn();
    cboColumn.Header = colName;
    cboColumn.SelectedItemBinding = textBinding;
    cboColumn.ItemsSource = statusItemsList;

    return cboColumn;
}

使用"开始"事件进行不同的检查.

如果支票返回好的,我想直接展开ComboBox,否则编辑模式将被取消:

void dataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
    ...
    if(notOK)
        e.Cancel;
    else {
        DataGridComboBoxColumn dgCboCol = (DataGridComboBoxColumn)e.Column;
        // expand dgCboCol
    }
    ...
}

问题:如何以编程方式扩展组合?开头事件是正确的选择吗?


答案:

void dataGrid_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
    if (e.EditingElement.GetType().Equals(typeof(ComboBox)))
    {
        ComboBox box = (ComboBox)e.EditingElement;
        box.IsDropDownOpen = true;
    }
}

推荐答案

来自DataGridBeginningEditEventArgs,您可以访问要像这样编辑的单元格的生成元素:

var contentComboBox = e.Column.GetCellContent(e.Row) as ComboBox;

但是,我不确定这是否会获得您需要的实际组合. DataGrids可以为每个单元格生成两个不同的元素,具体取决于它们是否处于编辑模式(仅读取和读写元素).由于BeginningEdit在输入编辑模式之前发生,因此将获得只读元素.

在此处理此操作的更好事件可能是准备cellforedit ,它将在数据项上实际调用BeginEdit后发射(换句话说,如果未取消BeginningEdit).在这种情况下,您可以直接通过编辑属性.

其他推荐答案

Take a look at this

)

尝试单击网格上的设置编辑模式,然后使用CellClick事件获取ComboBox并扩展它.

dataGrid.BeginEdit(true); 
ComboBox comboBox = (ComboBox)dataGrid.EditingControl; 
comboBox.IsDropDownOpen = true;

本文地址:https://www.itbaoku.cn/post/1794095.html