Benutzerdefinierte zusammengesetzte Designer – Workflowelementpräsentation
System.Activities.Presentation.WorkflowItemsPresenter ist ein Haupttyp im WF-Designer-Programmiermodell, der die Bearbeitung einer Auflistung enthaltener Elemente zulässt. In dem Beispiel wird veranschaulicht, wie ein Aktivitätsdesigner erstellt wird, der eine solche bearbeitbare Auflistung aufweist.
Das WorkflowItemsPresenter-Beispiel veranschaulicht Folgendes:
Erstellen eines benutzerdefinierten Aktivitätsdesigners mit einem System.Activities.Presentation.WorkflowItemsPresenter.
Erstellen eines Aktivitätsdesigners mit einer „reduzierten“ und „erweiterten“ Ansicht.
Überschreiben eines standardmäßigen Designers in einer neu gehosteten Anwendung.
Einrichten, Erstellen und Ausführen des Beispiels
Öffnen Sie die Beispielprojektmappe UsingWorkflowItemsPresenter.sln für C# oder für Visual Basic in Visual Studio.
Erstellen Sie das Projekt, und führen Sie es aus.
Eine neu gehostete Workflow-Designer-Anwendung wird geöffnet, und Sie können Aktivitäten auf den Zeichenbereich ziehen.
Das Wichtigste zum Beispiel
Der Code für dieses Beispiel zeigt Folgendes:
Die Aktivität, für die ein Designer erstellt wird:
Parallel
Die Erstellung eines benutzerdefinierten Aktivitätsdesigners mit einem System.Activities.Presentation.WorkflowItemsPresenter. Einige wichtige Punkte:
Beachten Sie die Verwendung der WPF-Datenbindung, um eine Bindung an
ModelItem.Branches
auszuführen.ModelItem
ist die Eigenschaft imWorkflowElementDesigner
, die auf das zugrunde liegende Objekt verweist, für das der Designer verwendet wird; in diesem FallParallel
.WorkflowItemsPresenter.SpacerTemplate kann verwendet werden, um ein visuelle Trennung festzulegen, die zwischen den einzelnen Elementen in der Auflistung angezeigt werden soll.
WorkflowItemsPresenter.ItemsPanel ist eine Vorlage, die bereitgestellt werden kann, um das Layout der Elemente in der Auflistung zu bestimmen. In diesem Fall wird ein horizontaler Stapelbereich verwendet.
Dies wird im folgenden Codebeispiel gezeigt.
<sad:WorkflowItemsPresenter HintText="Drop Activities Here" Items="{Binding Path=ModelItem.Branches}"> <sad:WorkflowItemsPresenter.SpacerTemplate> <DataTemplate> <Ellipse Width="10" Height="10" Fill="Black"/> </DataTemplate> </sad:WorkflowItemsPresenter.SpacerTemplate> <sad:WorkflowItemsPresenter.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </sad:WorkflowItemsPresenter.ItemsPanel> </sad:WorkflowItemsPresenter>
Führen Sie eine Zuordnung von
DesignerAttribute
zumParallel
-Typ aus, und geben Sie dann die gemeldeten Attribute aus.Registrieren Sie zuerst alle standardmäßigen Designer.
Nachfolgend ist das Codebeispiel angegeben.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Überschreiben Sie dann "Parallel" in der
RegisterCustomMetadata
-Methode.Im folgenden Code wird dies in C# und Visual Basic veranschaulicht.
void RegisterCustomMetadata() { AttributeTableBuilder builder = new AttributeTableBuilder(); builder.AddCustomAttributes(typeof(Parallel), new DesignerAttribute(typeof(CustomParallelDesigner))); MetadataStore.AddAttributeTable(builder.CreateTable()); }
Sub RegisterCustomMetadata() Dim builder As New AttributeTableBuilder() builder.AddCustomAttributes(GetType(Parallel), New DesignerAttribute(GetType(CustomParallelDesigner))) MetadataStore.AddAttributeTable(builder.CreateTable()) End Sub
Beachten Sie schließlich die Verwendung unterschiedlicher Datenvorlagen und Trigger, um die entsprechende Vorlage auf Grundlage der
IsRootDesigner
-Eigenschaft auszuwählen.Nachfolgend ist das Codebeispiel angegeben.
<sad:ActivityDesigner x:Class="Microsoft.Samples.CustomParallelDesigner" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sad="clr-namespace:System.Activities.Design;assembly=System.Activities.Design" xmlns:sadv="clr-namespace:System.Activities.Design.View;assembly=System.Activities.Design"> <sad:ActivityDesigner.Resources> <DataTemplate x:Key="Expanded"> <StackPanel> <TextBlock>This is the Expanded View</TextBlock> <sad:WorkflowItemsPresenter HintText="Drop Activities Here" Items="{Binding Path=ModelItem.Branches}"> <sad:WorkflowItemsPresenter.SpacerTemplate> <DataTemplate> <Ellipse Width="10" Height="10" Fill="Black"/> </DataTemplate> </sad:WorkflowItemsPresenter.SpacerTemplate> <sad:WorkflowItemsPresenter.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"/> </ItemsPanelTemplate> </sad:WorkflowItemsPresenter.ItemsPanel> </sad:WorkflowItemsPresenter> </StackPanel> </DataTemplate> <DataTemplate x:Key="Collapsed"> <TextBlock>This is the Collapsed View</TextBlock> </DataTemplate> <Style x:Key="ExpandOrCollapsedStyle" TargetType="{x:Type ContentPresenter}"> <Setter Property="ContentTemplate" Value="{DynamicResource Collapsed}"/> <Style.Triggers> <DataTrigger Binding="{Binding Path=IsRootDesigner}" Value="true"> <Setter Property="ContentTemplate" Value="{DynamicResource Expanded}"/> </DataTrigger> </Style.Triggers> </Style> </sad: ActivityDesigner.Resources> <Grid> <ContentPresenter Style="{DynamicResource ExpandOrCollapsedStyle}" Content="{Binding}"/> </Grid> </sad: ActivityDesigner>