Estensibilità della griglia delle proprietàProperty Grid Extensibliity

Uno sviluppatore può personalizzare la griglia delle proprietà visualizzata quando un'attività specificata viene selezionata all'interno della finestra di progettazione.A developer can customize the property grid that is displayed when a given activity is selected within the designer. Questa operazione può essere eseguita per creare un'esperienza di modifica dettagliata.This can be done to create a rich editing experience. In questo esempio viene illustrato come procedere.This sample shows how this can be done.

DimostrazioneDemonstrates

Estensibilità della griglia delle proprietà della finestra di progettazione flussi di lavoro.Workflow designer property grid extensibility.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Designer\PropertyGridExtensibility

DiscussioneDiscussion

Per estendere la griglia delle proprietà, uno sviluppatore dispone di opzioni per personalizzare l'aspetto inline di un editor della griglia delle proprietà o fornire una finestra di dialogo che viene visualizzata per un'area di modifica più avanzata.To extend the property grid, a developer has options to customize the inline appearance of a property grid editor or provide a dialog that appears for a more advanced editing surface. In questo esempio vengono illustrati due editor diversi, ovvero un editor inline e un editor della finestra di dialogo.There are two different editors demonstrated in this sample; an inline editor and a dialog editor.

Editor inlineInline Editor

Nell'esempio di editor inline viene illustrato quanto segue:The inline editor sample demonstrates the following:

  • Viene creato un tipo che deriva da PropertyValueEditor.Creates a type that derives from PropertyValueEditor.

  • Nel costruttore, il InlineEditorTemplate valore viene impostato con un modello di dati di Windows Presentation Foundation (WPF).In the constructor, the InlineEditorTemplate value is set with a Windows Presentation Foundation (WPF) data template. È possibile associarlo a un modello XAML, ma in questo esempio il codice viene usato per inizializzare il data binding.This can be bound to a XAML template, but in this sample, code is used to initialize data binding.

  • Il modello di dati dispone di un contesto dei dati di PropertyValue dell'elemento di cui è stato eseguito il rendering nella griglia delle proprietà.The data template has a data context of the PropertyValue of the item rendered in the property grid. Notare nel codice seguente (da CustomInlineEditor.cs) che questo contesto viene quindi associato alla proprietà Value.Note in the following code (from CustomInlineEditor.cs) that this context then binds to the Value property.

    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);  
    
  • Poiché l'attività e la finestra di progettazione sono nello stesso assembly, la registrazione degli attributi di ActivityDesigner viene completata nel costruttore statico dell'attività stessa, come illustrato nell'esempio seguente da SimpleCodeActivity.cs.Because the activity and the designer are in the same assembly, registration of the activity designer attributes are accomplished in the static constructor of the activity itself, as shown in the following example from 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 finestreDialog Editor

Nell'esempio di editor finestre viene illustrato quanto segue:The dialog editor sample demonstrates the following:

  1. Viene creato un tipo che deriva da DialogPropertyValueEditor.Creates a type that derives from DialogPropertyValueEditor.

  2. Viene impostato il valore InlineEditorTemplate nel costruttore con un modello di dati WPFWPF.Sets the InlineEditorTemplate value in the constructor with a WPFWPF data template. Può essere creato in XAML, ma in questo esempio viene creato nel codice.This can be created in XAML, but in this sample, this is created in code.

  3. Il modello di dati dispone di un contesto dei dati di PropertyValue dell'elemento di cui è stato eseguito il rendering nella griglia delle proprietà.The data template has a data context of the PropertyValue of the item rendered in the property grid. Nel codice seguente viene quindi eseguita l'associazione alla proprietà Value.In the following code, this then binds to the Value property. È importante includere inoltre un oggetto EditModeSwitchButton per fornire il pulsante che genera la finestra di dialogo in FilePickerEditor.cs.It is critical to also include an EditModeSwitchButton to provide the button that raises the dialog in 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. Esegue l'override di Microsoft.Windows.Design.PropertyEditing.ShowDialog metodo nel tipo di finestra di progettazione per gestire la visualizzazione della finestra di dialogo.Overrides the Microsoft.Windows.Design.PropertyEditing.ShowDialog method in the designer type to handle the display of the dialog. In questo esempio viene illustrato un oggetto FileDialog di base.In this sample, a basic FileDialog is shown.

    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. Poiché l'attività e la finestra di progettazione sono nello stesso assembly, la registrazione degli attributi di ActivityDesigner viene completata nel costruttore statico dell'attività stessa, come illustrato nell'esempio seguente da SimpleCodeActivity.cs.Because the activity and the designer are in the same assembly, registration of the activity designer attributes are accomplished in the static constructor of the activity itself, as shown in the following example from 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());  
    }  
    

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Compilare la soluzione, quindi aprire il file Workflow1.xaml.Build the solution, and then open Workflow1.xaml.

  2. Trascinare un SimpleCodeActivity dalla casella degli strumenti nell'area di disegno della finestra di progettazione.Drag a SimpleCodeActivity from the toolbox onto the designer canvas.

  3. Fare clic su di SimpleCodeActivity e quindi aprire la griglia delle proprietà in cui è presente un controllo dispositivo di scorrimento e un file di controllo di selezione.Click the SimpleCodeActivity and then open the property grid where there is a slider control and a file picking control.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Designer\PropertyGridExtensibility