如何在(WPF)DataGridComboBoxColumn中展开组合框
本文关键字:组合 DataGridComboBoxColumn WPF | 更新日期: 2023-09-27 18:27:42
在我的C#WPF应用程序(.NET 4.0)中,我有一个由包括DataGridComboBoxColumn:在内的代码动态填充的DataGrid
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;
}
使用BeginningEdit事件执行不同的检查。
如果检查返回正常,我想直接展开组合框,否则编辑模式将被取消:
void dataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
...
if(notOK)
e.Cancel;
else {
DataGridComboBoxColumn dgCboCol = (DataGridComboBoxColumn)e.Column;
// expand dgCboCol
}
...
}
问题:如何以编程方式展开组合框?BeginningEdit事件是执行此操作的正确位置吗?
答案:
void dataGrid_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
if (e.EditingElement.GetType().Equals(typeof(ComboBox)))
{
ComboBox box = (ComboBox)e.EditingElement;
box.IsDropDownOpen = true;
}
}
看看这个
尝试将网格上的编辑模式设置为单击,然后使用CellClick事件获取comboBox并展开它。
dataGrid.BeginEdit(true);
ComboBox comboBox = (ComboBox)dataGrid.EditingControl;
comboBox.IsDropDownOpen = true;
从DataGridBeginningEditEventArgs
,您可以访问将要编辑的单元格的生成元素,如下所示:
var contentComboBox = e.Column.GetCellContent(e.Row) as ComboBox;
然而,我不确定这是否会得到你需要的实际组合框。DataGrids可以为每个单元格生成两个不同的元素,具体取决于它们是否处于编辑模式(只读和读写元素)。由于BeginningEdit
发生在进入编辑模式之前,因此这将获得只读元素。
在中处理此问题的更好事件可能是PreparingCellForEdit,它将在对数据项实际调用BeginEdit
之后激发(换句话说,如果BeginningEdit
没有被取消)。在这种情况下,您可以通过EditingElement属性直接访问该元素。