Delen via


Aangepaste composietontwerpers - Presentator voor werkprocesitems

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.

  • Ontwerpen van een activiteitsontwerper met de weergave 'samengevouwen' en 'uitgevouwen'.

  • Het overschrijven van een standaardontwerper in een opnieuw gehoste toepassing.

Het voorbeeld instellen, bouwen en uitvoeren

  1. Open de UsingWorkflowItemsPresenter.sln voorbeeldoplossing voor C# of voor Visual Basic in Visual Studio.

  2. Bouw de oplossing en voer deze uit.

    Een hergehoste applicatie voor het ontwerpen van werkstromen opent, waarna u activiteiten naar het canvas kunt slepen.

Belangrijke voorbeelden

De code voor dit voorbeeld toont het volgende:

  • De activiteit waarvoor een ontwerper gemaakt is: Parallel

  • Het maken van een aangepaste activiteitontwerper met een System.Activities.Presentation.WorkflowItemsPresenter. Een paar dingen om op te merken:

    • Let op het gebruik van WPF-gegevensbinding om verbinding te maken met ModelItem.Branches. ModelItem is de eigenschap op WorkflowElementDesigner die verwijst naar het onderliggende object waarvoor de ontwerper wordt gebruikt, in dit geval ons Parallel.

    • Deze WorkflowItemsPresenter.SpacerTemplate kan worden gebruikt om een visueel element weer te geven tussen de individuele 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 DesignerAttributeParallel 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 RegisterCustomMetadata methode door de parallel te overriden.

      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>
    

Zie ook