Aangepaste samengestelde ontwerpers - Presentator voor werkstroomitems
Het System.Activities.Presentation.WorkflowItemsPresenter is een belangrijk type in het programmeermodel WF Designer waarmee een verzameling ingesloten elementen kan worden bewerkt. In dit voorbeeld ziet u hoe u een activiteitontwerper bouwt die een dergelijke bewerkbare verzameling weergeeft.
In het voorbeeld WorkflowItemsPresenter ziet u het volgende:
Een aangepaste activiteitontwerper maken met een System.Activities.Presentation.WorkflowItemsPresenter.
Een activiteitsontwerper maken met de weergave 'samengevouwen' en 'uitgevouwen'.
Het overschrijven van een standaardontwerper in een opnieuw gehoste toepassing.
Het voorbeeld instellen, bouwen en uitvoeren
Open de UsingWorkflowItemsPresenter.sln voorbeeldoplossing voor C# of voor Visual Basic in Visual Studio.
Bouw de oplossing en voer deze uit.
Er wordt een toepassing voor opnieuw gehoste werkstroomontwerper geopend en u kunt activiteiten naar het canvas slepen.
Voorbeelden van markeringen
De code voor dit voorbeeld toont het volgende:
De activiteit waarvoor een ontwerper is gebouwd:
Parallel
Het maken van een aangepaste activiteitontwerper met een System.Activities.Presentation.WorkflowItemsPresenter. Een paar dingen die u moet aanwijzen:
Let op het gebruik van WPF-gegevensbinding om verbinding te maken met
ModelItem.Branches
.ModelItem
is de eigenschapWorkflowElementDesigner
die verwijst naar het onderliggende object waarvoor de ontwerper wordt gebruikt, in dit geval onzeParallel
.Deze WorkflowItemsPresenter.SpacerTemplate kan worden gebruikt om een visual weer te geven tussen de afzonderlijke items in de verzameling.
WorkflowItemsPresenter.ItemsPanel is een sjabloon die kan worden opgegeven om de indeling van de items in de verzameling te bepalen. In dit geval wordt een horizontaal stapelpaneel gebruikt.
In deze volgende voorbeeldcode ziet u dit.
<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>
Voer een koppeling van het
DesignerAttribute
Parallel
type uit en voer vervolgens de gerapporteerde kenmerken uit.Registreer eerst alle standaardontwerpers.
Hier volgt het codevoorbeeld.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Overschrijf vervolgens de parallelle methode
RegisterCustomMetadata
.De volgende code toont dit in C# 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
Let ten slotte op het gebruik van verschillende gegevenssjablonen en triggers om de juiste sjabloon te selecteren op basis van de
IsRootDesigner
eigenschap.Hier volgt het codevoorbeeld.
<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>