Sdílet prostřednictvím


Rozšiřitelnost mřížky vlastností

Můžete přizpůsobit mřížku vlastností, která se zobrazí, když je daná aktivita vybrána v návrháři, a vytvořit tak bohaté prostředí pro úpravy. Ukázka PropertyGridExtensibility ukazuje, jak to lze provést.

Demonstruje

Rozšiřitelnost mřížky vlastností návrháře pracovního postupu

Diskuse

Pro rozšíření mřížky vlastností má vývojář možnosti přizpůsobit vložený vzhled editoru mřížky vlastností nebo poskytnout dialogové okno, které se zobrazí pro pokročilejší úpravu povrchu. V této ukázce jsou demonstrované dva různé editory; vložený editor a editor dialogových oken.

Vložený editor

Ukázka vloženého editoru ukazuje následující:

  • Vytvoří typ, který je odvozen od PropertyValueEditor.

  • V konstruktoru InlineEditorTemplate je hodnota nastavena pomocí šablony dat WPF (Windows Presentation Foundation). To může být vázáno na šablonu XAML, ale v této ukázce se kód používá k inicializaci datové vazby.

  • Šablona dat má datový kontext PropertyValue položky vykreslené v mřížce vlastností. Všimněte si v následujícím kódu (z CustomInlineEditor.cs), že tento kontext pak vytvoří vazbu na Value vlastnost.

    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);
    
  • Vzhledem k tomu, že aktivita a návrhář jsou ve stejném sestavení, registrace atributů návrháře aktivit se provádí ve statickém konstruktoru samotné aktivity, jak je znázorněno v následujícím příkladu z 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 dialogových oken

Ukázka editoru dialogových oken ukazuje následující:

  1. Vytvoří typ, který je odvozen od DialogPropertyValueEditor.

  2. InlineEditorTemplate Nastaví hodnotu v konstruktoru pomocí šablony dat WPF. To se dá vytvořit v XAML, ale v této ukázce se vytvoří v kódu.

  3. Šablona dat má datový kontext PropertyValue položky vykreslené v mřížce vlastností. V následujícím kódu se pak vytvoří vazba na Value vlastnost. Je důležité zahrnout EditModeSwitchButton také tlačítko, které vyvolá dialogové okno v 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. Přepíše metodu ShowDialog v typu návrháře pro zpracování zobrazení dialogového okna. V této ukázce se zobrazí základní 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. Vzhledem k tomu, že aktivita a návrhář jsou ve stejném sestavení, registrace atributů návrháře aktivit se provádí ve statickém konstruktoru samotné aktivity, jak je znázorněno v následujícím příkladu z 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());
    }
    

Nastavení, sestavení a spuštění ukázky

  1. Sestavte řešení a otevřete Workflow1.xaml.

  2. Přetáhněte SimpleCodeActivity z panelu nástrojů na plátno návrháře.

  3. Klikněte na SimpleCodeActivity a otevřete mřížku vlastností, kde je ovládací prvek posuvníku a ovládací prvek pro výběr souboru.