Desainer Komposit Kustom - Penyaji Item Alur Kerja

System.Activities.Presentation.WorkflowItemsPresenter adalah jenis kunci dalam model pemrograman perancang WF yang memungkinkan pengeditan koleksi elemen yang terkandung. Sampel ini menunjukkan cara membangun perancang aktivitas yang menampilkan koleksi yang dapat diedit seperti itu.

Sampel WorkflowItemsPresenter menunjukkan:

Menyiapkan, membangun, dan menjalankan sampel

  1. Buka solusi sampel UsingWorkflowItemsPresenter.sln untuk C# atau untuk Visual Basic di Visual Studio.

  2. Bangun dan jalankan solusinya.

    Aplikasi perancang alur kerja yang dihosting ulang terbuka, dan Anda dapat menyeret aktivitas ke kanvas.

Contoh sorotan

Kode untuk sampel ini menunjukkan hal berikut:

  • Aktivitas yang sesuai untuk perancang: Parallel

  • Pembuatan perancang aktivitas kustom dengan System.Activities.Presentation.WorkflowItemsPresenter. Beberapa hal yang perlu diperhatikan:

    • Perhatikan penggunaan pengikatan data WPF untuk mengikat ke ModelItem.Branches. ModelItem adalah properti pada WorkflowElementDesigner yang mengacu pada objek dasar yang digunakan desainer, dalam hal ini, Parallel kami.

    • WorkflowItemsPresenter.SpacerTemplate dapat digunakan untuk menempatkan visual untuk ditampilkan di antara masing-masing item dalam koleksi.

    • WorkflowItemsPresenter.ItemsPanel adalah templat yang dapat disediakan untuk menentukan tata letak item dalam koleksi. Dalam hal ini, digunakan panel tumpukan yang horizontal.

    Contoh kode berikut ini menunjukkan ini.

    <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>
    
  • Lakukan asosiasikan DesignerAttribute dengan jenis Parallel dan keluarkan atribut yang telah dilaporkan.

    • Pertama, daftarkan semua desainer default.

      Berikut ini adalah contoh kode.

      // register metadata
      (new DesignerMetadata()).Register();
      RegisterCustomMetadata();
      
      ' register metadata
      Dim metadata = New DesignerMetadata()
      metadata.Register()
      ' register custom metadata
      RegisterCustomMetadata()
      
    • Kemudian, timpa paralel dalam metode RegisterCustomMetadata.

      Kode berikut menunjukkan ini di C# dan 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
      
  • Terakhir, perhatikan penggunaan templat dan pemicu data yang berbeda untuk memilih templat yang sesuai berdasarkan IsRootDesigner properti .

    Berikut ini adalah contoh kode.

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

Lihat juga