Uitbreidbaarheid van eigenschappenraster
U kunt het eigenschappenraster aanpassen dat wordt weergegeven wanneer een bepaalde activiteit wordt geselecteerd in de ontwerpfunctie, waardoor u een uitgebreide bewerkingservaring kunt maken. Het PropertyGridExtensibility-voorbeeld laat zien hoe dit kan worden gedaan.
Demonstreert
Uitbreidbaarheid van eigenschappenraster van werkstroomontwerper.
Discussie
Als u het eigenschappenraster wilt uitbreiden, heeft een ontwikkelaar opties om het uiterlijk van een eigenschappenrastereditor aan te passen of een dialoogvenster te bieden dat wordt weergegeven voor een geavanceerder bewerkingsoppervlak. In dit voorbeeld worden twee verschillende editors gedemonstreerd; een inline-editor en een dialoogvenstereditor.
Inline-editor
In het voorbeeld van de inline-editor ziet u het volgende:
Hiermee maakt u een type dat is afgeleid van PropertyValueEditor.
In de constructor wordt de InlineEditorTemplate waarde ingesteld met een WPF-gegevenssjabloon (Windows Presentation Foundation). Dit kan worden gebonden aan een XAML-sjabloon, maar in dit voorbeeld wordt code gebruikt om gegevensbinding te initialiseren.
De gegevenssjabloon heeft een gegevenscontext van het PropertyValue item dat wordt weergegeven in het eigenschappenraster. Houd er rekening mee in de volgende code (uit CustomInlineEditor.cs) dat deze context vervolgens wordt gekoppeld aan de
Value
eigenschap.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);
Omdat de activiteit en de ontwerper zich in dezelfde assembly bevinden, worden de registratie van de kenmerken van de activiteitontwerper uitgevoerd in de statische constructor van de activiteit zelf, zoals wordt weergegeven in het volgende voorbeeld uit 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()); }
Dialoogvenstereditor
In het voorbeeld van de dialoogvenstereditor ziet u het volgende:
Hiermee maakt u een type dat is afgeleid van DialogPropertyValueEditor.
Hiermee stelt u de InlineEditorTemplate waarde in de constructor in met een WPF-gegevenssjabloon. Dit kan worden gemaakt in XAML, maar in dit voorbeeld wordt dit gemaakt in code.
De gegevenssjabloon heeft een gegevenscontext van het PropertyValue item dat wordt weergegeven in het eigenschappenraster. In de volgende code wordt deze vervolgens gekoppeld aan de
Value
eigenschap. Het is van cruciaal belang om ook een EditModeSwitchButton knop op te nemen waarmee het dialoogvenster in FilePickerEditor.cs wordt weergegeven.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;
Overschrijft de ShowDialog methode in het ontwerptype om de weergave van het dialoogvenster te verwerken. In dit voorbeeld wordt een basis FileDialog weergegeven.
public override void ShowDialog(PropertyValue propertyValue, IInputElement commandSource) { Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); if (ofd.ShowDialog() == true) { propertyValue.Value = ofd.FileName; } }
Omdat de activiteit en de ontwerper zich in dezelfde assembly bevinden, worden de registratie van de kenmerken van de activiteitontwerper uitgevoerd in de statische constructor van de activiteit zelf, zoals wordt weergegeven in het volgende voorbeeld uit 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()); }
Het voorbeeld instellen, compileren en uitvoeren
Bouw de oplossing en open vervolgens Workflow1.xaml.
Sleep een SimpleCodeActivity van de werkset naar het ontwerpcanvas.
Klik op SimpleCodeActivity en open vervolgens het eigenschappenraster met een schuifregelaar en een besturingselement voor het kiezen van bestanden.