Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
System.Activities.Presentation.WorkflowItemsPresenter es un tipo clave en el modelo de programación del diseñador WF que permite la edición de una colección de elementos contenidos. En este ejemplo se muestra cómo crear un diseñador de actividad que expone una colección editable.
En el ejemplo WorkflowItemsPresenter se muestra lo siguiente:
Crear un diseñador de actividad personalizado con un objeto System.Activities.Presentation.WorkflowItemsPresenter.
Crear un diseñador de actividad con una vista "contraída" y "expandida".
Invalidación de un diseñador predeterminado en una aplicación rehospedada.
Configuración, compilación y ejecución del ejemplo
Abra la solución de ejemplo UsingWorkflowItemsPresenter.sln para C# o para Visual Basic en Visual Studio.
Compile y ejecute la solución.
Se abre una aplicación de diseñador de flujo de trabajo hospedada en otro host; puede arrastrar actividades al lienzo.
Resaltados de ejemplo
El código de este ejemplo muestra lo siguiente:
La actividad para la que se crea un diseñador:
Parallel
La creación de un diseñador de actividades personalizado con un objeto System.Activities.Presentation.WorkflowItemsPresenter. Algunas cosas que hay que señalar:
Observe el uso de enlace de datos de WPF para enlazarse a
ModelItem.Branches
.ModelItem
es la propiedad deWorkflowElementDesigner
que hace referencia al objeto subyacente para el que se está usando el diseñador, en este caso nuestroParallel
.WorkflowItemsPresenter.SpacerTemplate se puede usar para colocar un objeto visual para mostrar entre los elementos individuales de la colección.
WorkflowItemsPresenter.ItemsPanel es una plantilla que se puede proporcionar para determinar el diseño de los elementos de la colección. En este caso, se usa un panel apilado horizontal.
Este código de ejemplo siguiente muestra esto.
<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>
Realice una asociación de
DesignerAttribute
al tipoParallel
y, a continuación, genere los atributos indicados.En primer lugar, registre todos los diseñadores predeterminados.
A continuación se muestra el ejemplo de código.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
A continuación, invalide el paralelo en el método
RegisterCustomMetadata
.El código siguiente muestra esto en C# y 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
Por último, tenga en cuenta el uso de diferentes plantillas de datos y desencadenadores para seleccionar la plantilla adecuada en función de la
IsRootDesigner
propiedad .A continuación se muestra el ejemplo de código.
<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>