Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können das Eigenschaftenraster anpassen, das angezeigt wird, wenn eine bestimmte Aktivität im Designer ausgewählt wird, wodurch eine umfangreiche Bearbeitungserfahrung entsteht. Das PropertyGridExtensibility-Beispiel zeigt, wie dies möglich ist.
Zeigt
Erweiterbarkeit des Workflow-Designer-Eigenschaftenrasters.
Diskussion
Um das Eigenschaftenraster zu erweitern, bietet ein Entwickler Optionen zum Anpassen der Inlinedarstellung eines Eigenschaftenraster-Editors oder zum Bereitstellen eines Dialogfelds, das für eine erweiterte Bearbeitungsoberfläche angezeigt wird. In diesem Beispiel werden zwei verschiedene Redakteure gezeigt; ein Inline-Editor und ein Dialogfeld-Editor.
Inline-Editor
Das Inline-Editorbeispiel veranschaulicht Folgendes:
Ein von PropertyValueEditor abgeleiteter Typ wird erstellt.
Im Konstruktor wird der InlineEditorTemplate Wert mit einer WPF-Datenvorlage (Windows Presentation Foundation) festgelegt. Dies kann an eine XAML-Vorlage gebunden werden, in diesem Beispiel wird jedoch Code verwendet, um die Datenbindung zu initialisieren.
Die Datenvorlage weist einen Datenkontext für den PropertyValue-Wert des im Eigenschaftenraster gerenderten Elements auf. Beachten Sie im folgenden Code (aus CustomInlineEditor.cs), dass dieser Kontext dann an die
ValueEigenschaft gebunden wird.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);Da sich die Aktivität und der Designer in derselben Assembly befinden, werden die Registrierung der Attribute des Aktivitäts-Designers im statischen Konstruktor der Aktivität selbst durchgeführt, wie im folgenden Beispiel aus SimpleCodeActivity.cs gezeigt.
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()); }
Dialog-Editor
Das Dialogfeld-Editorbeispiel veranschaulicht Folgendes:
Ein von DialogPropertyValueEditor abgeleiteter Typ wird erstellt.
Legt den InlineEditorTemplate Wert im Konstruktor mit einer WPF-Datenvorlage fest. Dies kann in XAML erstellt werden, aber in diesem Beispiel wird dies im Code erstellt.
Die Datenvorlage weist einen Datenkontext für den PropertyValue-Wert des im Eigenschaftenraster gerenderten Elements auf. Im folgenden Code wird dies dann an die
ValueEigenschaft gebunden. Es ist auch wichtig, eine EditModeSwitchButton Schaltfläche anzugeben, die das Dialogfeld in FilePickerEditor.cs auslöst.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;Überschreibt die ShowDialog-Methode im Designertyp zur Behandlung der Dialogfeldanzeige. In diesem Beispiel wird ein einfaches FileDialog gezeigt.
public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource) { Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); if (ofd.ShowDialog() == true) { propertyValue.Value = ofd.FileName; } }Da sich die Aktivität und der Designer in derselben Assembly befinden, werden die Registrierung der Attribute des Aktivitäts-Designers im statischen Konstruktor der Aktivität selbst durchgeführt, wie im folgenden Beispiel aus SimpleCodeActivity.cs gezeigt.
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()); }
So können Sie das Beispiel einrichten, erstellen und ausführen
Erstellen Sie die Lösung, und öffnen Sie dann Workflow1.xaml.
Ziehen Sie ein SimpleCodeActivityvon der Toolbox auf den Designerzeichnungsbereich.
Klicken Sie auf die SimpleCodeActivity und öffnen Sie dann das Eigenschaftenraster, das ein Schieberegler-Steuerelement und ein Dateiauswahlsteuerelement enthält.