Concepteurs composites personnalisés - Présentateur d'éléments de workflow
System.Activities.Presentation.WorkflowItemsPresenter est un type de clé dans le modèle de programmation de concepteur WF qui permet la modification d’une collection d’éléments contenus. Cet exemple montre comment générer un concepteur d’activités qui expose une telle collection modifiable.
L’exemple WorkflowItemsPresenter illustre :
Création d'un concepteur d'activités personnalisées avec un System.Activities.Presentation.WorkflowItemsPresenter.
Création d’un concepteur d’activités avec une vue « réduite » et « développée ».
Substitution d'un concepteur par défaut dans une application réhébergée.
Configurer, générer et exécuter l’exemple
Ouvrez l’exemple de solution UsingWorkflowItemsPresenter.sln pour C# ou pour Visual Basic dans Visual Studio.
Créez et exécutez la solution.
Une application de concepteur de workflow réhébergée s’ouvre, et vous pouvez faire glisser des activités dans le canevas.
Points clés de l'exemple
Le code de cet exemple illustre les points suivants :
L’activité pour laquelle un concepteur est conçu :
Parallel
La création d'un concepteur d'activités personnalisées avec un System.Activities.Presentation.WorkflowItemsPresenter. Quelques points à noter :
Notez l'utilisation de la liaison de données WPF pour lier à
ModelItem.Branches
.ModelItem
est la propriété surWorkflowElementDesigner
qui fait référence à l'objet sous-jacent pour lequel le concepteur est utilisé, dans ce cas,Parallel
.WorkflowItemsPresenter.SpacerTemplate peut être utilisé pour placer un visuel à afficher entre les éléments individuels de la collection.
WorkflowItemsPresenter.ItemsPanel est un modèle qui peut être fourni pour déterminer la disposition des éléments dans la collection. Dans le cas présent, un panneau d'empilement horizontal est utilisé.
L'exemple de code suivant illustre ce point.
<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>
Effectuez une association de
DesignerAttribute
au typeParallel
, puis fournissez en sortie les attributs signalés.En premier lieu, enregistrez tous les concepteurs par défaut.
Voici l'exemple de code.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Ensuite, substituez la parallèle dans la méthode
RegisterCustomMetadata
.Le code suivant illustre ce point en C# et en Visual Basic.
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
Enfin, notez l'utilisation de modèles de données et de déclencheurs différents pour sélectionner le modèle approprié en fonction de la propriété
IsRootDesigner
.Voici l'exemple de code.
<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>