应用过程中有需要使得单元格具备Combobox的风格。
下面就应用方式,分两种状况说明:XAML代码和程序代码
XAML代码:
注意:1、在使用其他编辑器时,一定要设置Name为PART_Editor;
2、如果ItemSource要使用数据行对象自身,则一定要在属性名称前加上Data,如下
Data.YourProperty}"/>
除了CellTemplate,也可以设置EditTemplate和DisplayTemplate。EditTemplate,顾名思义,就是进入编辑状态下的表现形式。其使用方式类似CellTemplate,只不过内部采用ControlTemplate。DisplateTemplate专为显示效果使用,方式同CellTemplate。这里不再重复说明。
EditSettings效果同EditTemplate,在编辑时显现。但是与Template相比,EditSettings无法识别数据行对象,这意味着只能通过CellTemplate或EditTemplate解决。
当EditSettings和CellTemplate同时设置时,以CellTemplate为准。
程序代码:
代码创建DataTemplate
private void CreateComboBoxCellEditingTemplate(GridColumn column, string bindingField)
{
if (column == null || bindingField == null)
{
return;
}
DataTemplate dtDataTemplate = new DataTemplate();
FrameworkElementFactory factory = new FrameworkElementFactory(typeof(ComboBoxEdit));
factory.Name = "PART_Editor";
factory.SetValue(FrameworkElement.NameProperty, "PART_Editor");
factory.SetBinding(ComboBoxEdit.ItemsSourceProperty, new Binding("Data.YourProperty"));
dtDataTemplate.VisualTree = factory;
column.CellTemplate = dtDataTemplate;
}
注意事项:
1、必须通过FrameworkElementFactory创建界面元素;
2、必须指定名称"PART_Editor"
3、通过VisualTree设置界面元素
代码创建EditSettings
private void CreateComboBoxCellEditingTemplate(GridColumn column, string bindingField)
{
if (column == null || bindingField == null)
{
return;
}
ComboBoxEditSettings ces = new ComboBoxEditSettings();
ces.SetBinding(ComboBox.ItemsSourceProperty, new Binding("DataProp"));
ces.SetValue(ComboBox.StaysOpenOnEditProperty, true);
ces.SetValue(ComboBox.WidthProperty, column.Width - 10);
column.EditSettings = ces;
}
这个通用有个适用场景问题,若DataProp来源于数据行对象本身,则无法使用。