Condividi tramite


Finestre di progettazione composite personalizzate - Relatore di elementi del flusso di lavoro

Le informazioni contenute in questo argomento sono valide per Windows Workflow Foundation 4.

WorkflowItemsPresenter è un tipo chiave nel modello di programmazione della finestra di progettazione di WF che consente la modifica di una raccolta di elementi contenuti. In questo esempio viene illustrato come compilare un ActivityDesigner che espone una raccolta modificabile.

In questo esempio viene illustrato quanto segue:

  • Creazione di un ActivityDesigner personalizzato con un oggetto WorkflowItemsPresenter.

  • Creazione di un ActivityDesigner con una visualizzazione "compressa" ed "espansa."

  • Esecuzione dell'override di una finestra di progettazione predefinita in un'applicazione riallocata.

Per impostare, compilare ed eseguire l'esempio

  1. Aprire la soluzione di esempio UsingWorkflowItemsPresenter.sln per C# o per VB in Visual Studio 2010.

  2. Compilare ed eseguire la soluzione. Dovrebbe essere visualizzata un'applicazione della finestra di progettazione flussi di lavoro riallocata in cui è possibile trascinare attività nell'area di disegno.

Evidenziazioni di esempio

Nel codice di questo esempio viene illustrato quanto segue:

  • Compilazione di una finestra di progettazione dell'attività per: Parallel

  • Creazione di un ActivityDesigner personalizzato con un oggetto WorkflowItemsPresenter. Alcune considerazioni:

    • Si noti l'utilizzo dell'associazione dati WPF per l'associazione a ModelItem.Branches. ModelItem è la proprietà in WorkflowElementDesigner che fa riferimento all'oggetto sottostante per il quale viene utilizzata la finestra di progettazione, in questo caso Parallel.

    • SpacerTemplate può essere utilizzato per inserire un elemento visivo per visualizzare i singoli elementi nella raccolta.

    • ItemsPanel è un modello che può essere fornito per determinare il layout degli elementi nella raccolta. In questo caso, viene utilizzato un pannello Stack orizzontale.

Nel codice dell'esempio seguente viene illustrata questa operazione.

      <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>
  • Eseguire un'associazione di DesignerAttribute al tipo Parallel, quindi restituire gli attributi indicati.

    • Registrare innanzitutto tutte le finestre di progettazione predefinite.

Di seguito è riportato l'esempio di codice.

// register metadata
(new DesignerMetadata()).Register();
RegisterCustomMetadata();
' register metadata
Dim metadata = New DesignerMetadata()
metadata.Register()
' register custom metadata
RegisterCustomMetadata()
    • Eseguire quindi l'override dell'elemento parallelo nel metodo RegisterCustomMetadata.

Nel codice seguente viene illustrato questa operazione in C# e Visual Basic.

C#

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
  • Osservare infine notare l'utilizzo di diversi modelli di dati e trigger per selezionare il modello appropriato in base alla proprietà IsRootDesigner.

Di seguito è riportato l'esempio di codice.

<sad:ActivityDesigner x:Class="Microsoft.Samples.CustomParallelDesigner"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://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>
Dd744850.Important(it-it,VS.100).gif Nota:
È possibile che gli esempi siano già installati nel computer. Verificare la directory seguente (impostazione predefinita) prima di continuare.

<UnitàInstallazione>:\WF_WCF_Samples

Se questa directory non esiste, visitare la pagina relativa agli esempi di Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti gli esempi di Windows Communication Foundation (WCF) e WF. Questo esempio si trova nella directory seguente.

<UnitàInstallazione>:\WF_WCF_Samples\WF\Basic\CustomActivities\CustomActivityDesigners\WorkflowItemsPresenter