Compartir a través de


Extensibilidad de la cuadrícula de propiedades

Puede personalizar la cuadrícula de propiedades que se muestra cuando se selecciona una actividad determinada en el diseñador, creando una experiencia de edición enriquecida. En el ejemplo PropertyGridExtensibility se muestra cómo se puede hacer esto.

Demostraciones

Extensibilidad de la cuadrícula de propiedades del diseñador de flujo de trabajo.

Discusión

Para extender la cuadrícula de propiedades, un desarrollador tiene opciones para personalizar la apariencia integrada de un editor de cuadrícula de propiedades o proporcionar un cuadro de diálogo que ofrezca una superficie de edición más avanzada. En este ejemplo se muestran dos editores diferentes; un editor insertado y un editor de diálogos.

Editor en línea

El ejemplo de editor en línea muestra lo siguiente:

  • Crea un tipo que deriva de PropertyValueEditor.

  • En el constructor, el InlineEditorTemplate valor se establece con una plantilla de datos de Windows Presentation Foundation (WPF). Esto se puede enlazar a una plantilla XAML, pero en este ejemplo, el código se usa para inicializar el enlace de datos.

  • La plantilla de datos tiene un contexto de datos del PropertyValue elemento representado en la cuadrícula de propiedades. Tenga en cuenta en el código siguiente (de CustomInlineEditor.cs) que este contexto enlaza a la propiedad Value.

    FrameworkElementFactory stack = new FrameworkElementFactory(typeof(StackPanel));
    FrameworkElementFactory slider = new FrameworkElementFactory(typeof(Slider));
    Binding sliderBinding = new Binding("Value");
    sliderBinding.Mode = BindingMode.TwoWay;
    slider.SetValue(Slider.MinimumProperty, 0.0);
    slider.SetValue(Slider.MaximumProperty, 100.0);
    slider.SetValue(Slider.ValueProperty, sliderBinding);
    stack.AppendChild(slider);
    
  • Dado que la actividad y el diseñador están en el mismo ensamblado, el registro de los atributos del diseñador de actividad se realiza en el constructor estático de la propia actividad, como se muestra en el ejemplo siguiente de SimpleCodeActivity.cs.

    static SimpleCodeActivity()
    {
        AttributeTableBuilder builder = new AttributeTableBuilder();
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "RepeatCount", new EditorAttribute(typeof(CustomInlineEditor), typeof(PropertyValueEditor)));
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "FileName", new EditorAttribute(typeof(FilePickerEditor), typeof(DialogPropertyValueEditor)));
        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
    

Editor de cuadros de diálogo

El ejemplo del editor de diálogos muestra lo siguiente:

  1. Crea un tipo que deriva de DialogPropertyValueEditor.

  2. Establece el valor del InlineEditorTemplate en el constructor con una plantilla de datos de WPF. Esto se puede crear en XAML, pero en este ejemplo, se crea en código.

  3. La plantilla de datos tiene un contexto de datos del PropertyValue elemento representado en la cuadrícula de propiedades. En el siguiente código, a continuación se enlaza a la propiedad Value. También es fundamental incluir un EditModeSwitchButton como parte del botón que genera el cuadro de diálogo en FilePickerEditor.cs.

    this.InlineEditorTemplate = new DataTemplate();
    
    FrameworkElementFactory stack = new FrameworkElementFactory(typeof(StackPanel));
    stack.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
    FrameworkElementFactory label = new FrameworkElementFactory(typeof(Label));
    Binding labelBinding = new Binding("Value");
    label.SetValue(Label.ContentProperty, labelBinding);
    label.SetValue(Label.MaxWidthProperty, 90.0);
    
    stack.AppendChild(label);
    
    FrameworkElementFactory editModeSwitch = new FrameworkElementFactory(typeof(EditModeSwitchButton));
    
    editModeSwitch.SetValue(EditModeSwitchButton.TargetEditModeProperty, PropertyContainerEditMode.Dialog);
    
    stack.AppendChild(editModeSwitch);
    
    this.InlineEditorTemplate.VisualTree = stack;
    
  4. Invalida el método ShowDialog en el tipo de diseñador para administrar la presentación del cuadro de diálogo. En este ejemplo, se muestra un elemento básico FileDialog .

    public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource)
    {
        Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
        if (ofd.ShowDialog() == true)
        {
            propertyValue.Value = ofd.FileName;
        }
    }
    
  5. Dado que la actividad y el diseñador están en el mismo ensamblado, el registro de los atributos del diseñador de actividad se realiza en el constructor estático de la propia actividad, como se muestra en el ejemplo siguiente de SimpleCodeActivity.cs.

    static SimpleCodeActivity()
    {
        AttributeTableBuilder builder = new AttributeTableBuilder();
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "RepeatCount", new EditorAttribute(typeof(CustomInlineEditor), typeof(PropertyValueEditor)));
        builder.AddCustomAttributes(typeof(SimpleCodeActivity), "FileName", new EditorAttribute(typeof(FilePickerEditor), typeof(DialogPropertyValueEditor)));
        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
    

Para configurar, compilar y ejecutar el ejemplo

  1. Compile la solución y abra Workflow1.xaml.

  2. Arrastre SimpleCodeActivity del cuadro de herramientas al lienzo del diseñador.

  3. Haga clic en SimpleCodeActivity y abra la cuadrícula de propiedades donde hay un control deslizante y un control de selección de archivos.