Anpassade sammansatta designers – Presentatör av arbetsflödesobjekt
System.Activities.Presentation.WorkflowItemsPresenter är en nyckeltyp i WF-designerns programmeringsmodell som möjliggör redigering av en samling inneslutna element. Det här exemplet visar hur du skapar en aktivitetsdesigner som visar en sådan redigerbar samling.
Exemplet WorkflowItemsPresenter visar:
Skapa en anpassad aktivitetsdesigner med en System.Activities.Presentation.WorkflowItemsPresenter.
Skapa en aktivitetsdesigner med en "komprimerad" och "expanderad" vy.
Åsidosätter en standarddesigner i ett omvärdat program.
Konfigurera, skapa och köra exemplet
Öppna den UsingWorkflowItemsPresenter.sln exempellösningen för C# eller Visual Basic i Visual Studio.
Skapa och kör lösningen.
Ett program för arbetsflödesdesignern med omvärdning öppnas och du kan dra aktiviteter till arbetsytan.
Exempelhöjdpunkter
Koden för det här exemplet visar följande:
Aktiviteten som en designer har skapats för:
Parallel
Skapa en anpassad aktivitetsdesigner med en System.Activities.Presentation.WorkflowItemsPresenter. Några saker att påpeka:
Observera användningen av WPF-databindning för att binda till
ModelItem.Branches
.ModelItem
är egenskapen påWorkflowElementDesigner
som refererar till det underliggande objekt som designern används för, i det här fallet vårParallel
.WorkflowItemsPresenter.SpacerTemplate Kan användas för att placera ett visuellt objekt som ska visas mellan de enskilda objekten i samlingen.
WorkflowItemsPresenter.ItemsPanel är en mall som kan tillhandahållas för att fastställa layouten för objekten i samlingen. I det här fallet används en vågrät stackpanel.
Följande exempelkod visar detta.
<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>
Utför en association av
DesignerAttribute
tillParallel
typen och mata sedan ut de rapporterade attributen.Registrera först alla standarddesigners.
Följande är kodexemplet.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Åsidosätt sedan den parallella metoden i
RegisterCustomMetadata
.Följande kod visar detta i C# och 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
Observera slutligen användningen av olika datamallar och utlösare för att välja lämplig mall baserat på
IsRootDesigner
egenskapen.Följande är kodexemplet.
<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>