#xaml #.net-4.0 #workflow-foundation-4 #designer
#xaml #.net-4.0 #рабочий процесс-основа-4 #дизайнер
Вопрос:
Привет, я создаю рабочий процесс с помощью C # WWF 4.0, и у меня возникают некоторые проблемы:
Мой тестовый код:
Flowchart flow = new Flowchart
{
DisplayName = "Test",
StartNode = new FlowSwitch<String> { Expression = "[prop1]" },
Variables = { new Variable<String> { Name = "prop1" } },
};
FlowNode MySwitch = flow.StartNode;
flow.Nodes.Add(MySwitch);
Я сохраняю его:
StreamWriter sw = File.CreateText(@"../../test.xaml");
var xmlWriter = XmlWriter.Create(sw,
new XmlWriterSettings { Indent = true, OmitXmlDeclaration = false });
using (xmlWriter)
{
var xamlXmlWriter = new XamlXmlWriter(xmlWriter, new XamlSchemaContext());
using (xamlXmlWriter)
{
XamlWriter xamlWriter = ActivityXamlServices.CreateBuilderWriter(xamlXmlWriter);
using (xamlWriter)
{
var activityBuilder = new ActivityBuilder { Name = "Test", Implementation = Workflow };
XamlServices.Save(xamlWriter, activityBuilder);
}
}
}
sw.Close();
и затем я получаю этот XAML:
<?xml version="1.0" encoding="utf-8"?>
<Activity x:Class="Test" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Flowchart DisplayName="Test">
<Flowchart.Variables>
<Variable x:TypeArguments="x:String" Name="prop1" />
</Flowchart.Variables>
<Flowchart.StartNode>
<x:Reference>__ReferenceID0</x:Reference>
</Flowchart.StartNode>
<FlowSwitch x:TypeArguments="x:String" x:Name="__ReferenceID0" Expression="[prop1]" />
</Flowchart>
</Activity>
и когда я загружаю его в Visual Studio, я получаю этот рабочий процесс:
Я думаю, что это неправильно, потому что дуга, начинающаяся с узла «Start», должна находиться под полем, а не над ним!
Если я добавлю другие шаги, все они подключаются, используя только позицию over.
Что я делаю не так?
Комментарии:
1. Честно говоря, вам не нужно вставлять теги в заголовок. Они уже есть там, где им место . Кроме того, я не думаю, что вы делаете что-то неправильно; редактор просто не принимает правильных решений о том, где рисовать соединительные линии. Просто откройте соединение и попросите их исправить логику компоновки.
Ответ №1:
Редактор просто использует значения по умолчанию, когда вы открываете XAML activity в первый раз, потому что у него нет доступного состояния просмотра.
Если вы редактируете его с помощью конструктора, Свойства состояния просмотра (например, размер конструктора, положение и т. Д.) Добавляются в XAML:
<Activity mc:Ignorable="sap" x:Class="Test" sap:VirtualizedContainerService.HintSize="654,676" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Flowchart DisplayName="Test" sad:XamlDebuggerXmlReader.FileName="c:usersjp-correiadesktopWorkflowConsoleApplication1WorkflowConsoleApplication1test.xaml" sap:VirtualizedContainerService.HintSize="614,636" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces">
<Flowchart.Variables>
<Variable x:TypeArguments="x:String" Name="prop1" />
</Flowchart.Variables>
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="IsExpanded">False</x:Boolean>
<av:Point x:Key="ShapeLocation">240,72.5</av:Point>
<av:Size x:Key="ShapeSize">60,75</av:Size>
<av:PointCollection x:Key="ConnectorLocation">240,110 150,110 150,192.5</av:PointCollection>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
<Flowchart.StartNode>
<FlowSwitch x:TypeArguments="x:String" x:Name="__ReferenceID0" Expression="%[prop1]" sap:VirtualizedContainerService.HintSize="60,75">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<av:Point x:Key="ShapeLocation">120,192.5</av:Point>
<av:Size x:Key="ShapeSize">60,75</av:Size>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
</FlowSwitch>
</Flowchart.StartNode>
<x:Reference>__ReferenceID0</x:Reference>
</Flowchart>
</Activity>
Может быть, вы можете что-то придумать с WorkflowViewStateService напрямую, но это наверняка доставит вам неприятности. Я бы не стал возиться с этим.
Каков ваш сценарий? Возможно, вам следует использовать повторно размещенный конструктор для того, что вы пытаетесь выполнить.