Пользовательские составные конструкторы - средство представления элементов рабочего процесса
System.Activities.Presentation.WorkflowItemsPresenter является типом ключа в модели программирования конструктора WF, позволяющим редактирование коллекции содержащихся элементов. В этом образце показано, как построить конструктор действий, который предоставляет доступ к такой изменяемой коллекции.
Пример WorkflowItemsPresenter демонстрирует:
Создание настраиваемого конструктора действий с System.Activities.Presentation.WorkflowItemsPresenter.
Создание конструктора действий с "свернутым" и "развернутым" представлением.
Переопределение конструктора по умолчанию в повторно размещенном приложении.
Настройка, сборка и запуск примера
Откройте UsingWorkflowItemsPresenter.sln пример решения для C# или Visual Basic в Visual Studio.
Выполните сборку и запуск решения.
Откроется повторно размещенное приложение конструктора рабочих процессов, и вы можете перетащить действия на холст.
Примеры выделений
Код для этого образца показывает следующее.
Действие, для которого построен конструктор:
Parallel
Создание настраиваемого конструктора действий с System.Activities.Presentation.WorkflowItemsPresenter. Некоторые замечания.
Обратите внимание на использование привязки данных WPF для привязки к
ModelItem.Branches
.ModelItem
- свойствоWorkflowElementDesigner
, которое относится к базовому объекту, для которого используется конструктор, в данном случае -Parallel
.Шаблон WorkflowItemsPresenter.SpacerTemplate может использоваться для указания видимого изображения, отображаемого между отдельными элементами коллекции.
WorkflowItemsPresenter.ItemsPanel является шаблоном, который может быть предоставлен для определения макета элементов в коллекции. В данном случае используется горизонтальный элемент StackPanel.
Это показано в следующем примере кода.
<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>
Выполнение связи объекта
DesignerAttribute
с типомParallel
, а затем вывод указанных атрибутов.Сначала зарегистрируйте все конструкторы по умолчанию.
Ниже приведен пример кода.
// register metadata (new DesignerMetadata()).Register(); RegisterCustomMetadata();
' register metadata Dim metadata = New DesignerMetadata() metadata.Register() ' register custom metadata RegisterCustomMetadata()
Далее переопределите параллель в методе
RegisterCustomMetadata
.В следующем коде это показано на языках C# и 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
Наконец, обратите внимание на использование различных шаблонов данных и триггеров для выбора соответствующего шаблона на основании свойства
IsRootDesigner
.Ниже приведен пример кода.
<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>