Delen via


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

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

  2. 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 eigenschap WorkflowElementDesigner die verwijst naar het onderliggende object waarvoor de ontwerper wordt gebruikt, in dit geval onze Parallel.

    • 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 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 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>
    

Zie ook