Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan anpassa det egenskapsrutnät som visas när en viss aktivitet väljs i designern, vilket skapar en omfattande redigeringsupplevelse. Exemplet PropertyGridExtensibility visar hur detta kan göras.
Demonstrerar
Utökningsbarhet av arbetsflödesdesignerns egenskapsrutnät.
Diskussion
För att utöka egenskapsrutnätet har en utvecklare alternativ för att anpassa inline-utseendet på en redigerare för egenskapsrutnät eller tillhandahålla en dialogruta som visas för en mer avancerad redigeringsyta. Det finns två olika redigerare som visas i det här exemplet. en infogad redigerare och en dialogredigerare.
Inline-redigerare
Exempel på inline redigerare demonstrerar följande:
Skapar en typ som härleds från PropertyValueEditor.
I konstruktorn InlineEditorTemplate anges värdet med en WPF-datamall (Windows Presentation Foundation). Detta kan bindas till en XAML-mall, men i det här exemplet används kod för att initiera databindning.
Datamallen har en datakontext för PropertyValue av det objektet som visas i egenskapsrutnätet. ** Observera i följande kod (från CustomInlineEditor.cs) att denna kontext sedan binder till egenskapen
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);Eftersom aktiviteten och designern finns i samma sammansättning utförs registreringen av aktivitetsdesignerattributen i själva aktivitetens statiska konstruktor, som du ser i följande exempel från 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()); }
Dialogredigeraren
Exemplet på dialogredigeraren visar följande:
Skapar en typ som härleds från DialogPropertyValueEditor.
InlineEditorTemplate Anger värdet i konstruktorn med en WPF-datamall. Detta kan skapas i XAML, men i det här exemplet skapas detta i kod.
Datamallen har en datakontext för PropertyValue av det objektet som visas i egenskapsrutnätet. I följande kod binder detta sedan till egenskapen
Value. Det är viktigt att även inkludera en EditModeSwitchButton för att ange knappen som höjer dialogrutan i 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;Åsidosätter ShowDialog metoden i designertypen för att hantera visningen av dialogrutan. I detta exempel visas en grundläggande 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; } }Eftersom aktiviteten och designern finns i samma sammansättning utförs registreringen av aktivitetsdesignerattributen i själva aktivitetens statiska konstruktor, som du ser i följande exempel från 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()); }
Så här konfigurerar du, skapar och kör exemplet
Skapa lösningen och öppna sedan Workflow1.xaml.
Dra en SimpleCodeActivity från verktygslådan till designerarbetsytan.
Klicka på SimpleCodeActivity och öppna sedan egenskapsrutnätet där det finns en skjutreglagekontroll och en filplockningskontroll.