Соединения с рабочим процессом отображаются странно

#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 напрямую, но это наверняка доставит вам неприятности. Я бы не стал возиться с этим.

Каков ваш сценарий? Возможно, вам следует использовать повторно размещенный конструктор для того, что вы пытаетесь выполнить.