GridControl应用点滴之Combobox

    应用过程中有需要使得单元格具备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来源于数据行对象本身,则无法使用。


你可能感兴趣的:(DevExpress,for,WPF)