Finestre di progettazione composite personalizzate - Relatore di elementi del flusso di lavoro
System.Activities.Presentation.WorkflowItemsPresenter è un tipo chiave nel modello di programmazione della finestra di progettazione di WF che consente la modifica di una raccolta di elementi contenuti. In questo esempio viene illustrato come compilare un ActivityDesigner che espone una raccolta modificabile.
L'esempio WorkflowItemsPresenter illustra:
Creazione di un ActivityDesigner personalizzato con un oggetto System.Activities.Presentation.WorkflowItemsPresenter.
Creazione di una finestra di progettazione attività con una vista "compressa" ed "espansa".
Esecuzione dell'override di una finestra di progettazione predefinita in un'applicazione riallocata.
Impostare, compilare ed eseguire l'esempio
Aprire la soluzione di esempio UsingWorkflowItemsPresenter.sln per C# o per Visual Basic in Visual Studio.
Compilare ed eseguire la soluzione.
Si aprirà un'applicazione della finestra di progettazione flussi di lavoro riallocata ed è possibile trascinare attività nel canvas.
Elementi salienti dell'esempio
Nel codice di questo esempio viene illustrato quanto segue:
Compilazione di una finestra di progettazione dell'attività per:
Parallel
La creazione di un ActivityDesigner personalizzato con un oggetto System.Activities.Presentation.WorkflowItemsPresenter. Alcune considerazioni:
Notare l'uso dell'associazione dati WPF per eseguire l'associazione a
ModelItem.Branches
.ModelItem
è la proprietà suWorkflowElementDesigner
che fa riferimento all'oggetto sottostante la finestra di progettazione per il quale è usata, in questo caso,Parallel
.WorkflowItemsPresenter.SpacerTemplate può essere usato per inserire un elemento visivo per visualizzare i singoli elementi nella raccolta.
WorkflowItemsPresenter.ItemsPanel è un modello che può essere fornito per determinare il layout degli elementi nella raccolta. In questo caso, viene usato un pannello Stack orizzontale.
Nel codice dell'esempio seguente viene illustrata questa operazione.
<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>
Eseguire un'associazione di
DesignerAttribute
al tipoParallel
, quindi restituire gli attributi indicati.Registrare innanzitutto tutte le finestre di progettazione predefinite.
Di seguito è riportato l'esempio di codice.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Eseguire quindi l'override dell'elemento parallelo nel metodo
RegisterCustomMetadata
.Nel codice seguente viene illustrato questa operazione in C# e 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
Osservare infine notare l'uso di diversi modelli di dati e trigger per selezionare il modello appropriato in base alla proprietà
IsRootDesigner
.Di seguito è riportato l'esempio di codice.
<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>