Návrháři vlastního skládání – místo pro položky pracovních postupů
Tento System.Activities.Presentation.WorkflowItemsPresenter typ je klíčovým typem programovacího modelu návrháře WF, který umožňuje úpravy kolekce obsažených prvků. Tato ukázka ukazuje, jak vytvořit návrháře aktivit, který zobrazí takovou upravitelnou kolekci.
Ukázka WorkflowItemsPresenter ukazuje:
Vytvoření vlastního návrháře aktivit pomocí objektu System.Activities.Presentation.WorkflowItemsPresenter.
Vytvoření návrháře aktivit sbaleným a rozbaleným zobrazením
Přepsání výchozího návrháře v znovu hostované aplikaci
Nastavení, sestavení a spuštění ukázky
Otevřete ukázkové řešení UsingWorkflowItemsPresenter.sln pro jazyk C# nebo Visual Basic v sadě Visual Studio.
Sestavte a spusťte řešení.
Otevře se znovu hostovaná aplikace návrháře pracovních postupů a můžete přetáhnout aktivity na plátno.
Ukázkové zvýraznění
Kód pro tuto ukázku ukazuje následující:
Aktivita, pro které je návrhář sestavený:
Parallel
Vytvoření vlastního návrháře aktivit pomocí objektu System.Activities.Presentation.WorkflowItemsPresenter. Několik věcí, které je potřeba zdůraznit:
Všimněte si použití datové vazby WPF k vytvoření vazby na
ModelItem.Branches
.ModelItem
je vlastnostWorkflowElementDesigner
, která odkazuje na podkladový objekt, pro který se návrhář používá, v tomto případě našeParallel
.WorkflowItemsPresenter.SpacerTemplate Dá se použít k vložení vizuálu, který se má zobrazit mezi jednotlivými položkami v kolekci.
WorkflowItemsPresenter.ItemsPanel je šablona, která se dá poskytnout k určení rozložení položek v kolekci. V tomto případě se použije vodorovný panel zásobníku.
Tento následující příklad kódu ukazuje toto.
<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>
Proveďte přidružení typu
DesignerAttribute
kParallel
typu a pak vypište hlášené atributy.Nejprve zaregistrujte všechny výchozí návrháře.
Následuje příklad kódu.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Pak přepište paralelní metodu
RegisterCustomMetadata
.Následující kód ukazuje tento kód v jazyce C# a 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
Nakonec si všimněte použití různých šablon dat a triggerů k výběru vhodné šablony na
IsRootDesigner
základě vlastnosti.Následuje příklad kódu.
<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>