Конструкторы настраиваемых действий в Workflow Foundation 3.5: как они работают?

Цель этой публикации:

Я понимаю, что Workflow Foundation не пользуется большой популярностью в StackOverflow и, вероятно, ответов будет немного или вообще не будет. Этот пост предназначен как ресурс для людей, пытающихся настроить внешний вид действий рабочего процесса с помощью пользовательских классов конструктора.


Цели:

Я пытаюсь создать собственный класс конструктора для действий рабочего процесса, чтобы добиться следующего:

  1. Сделайте действия менее техническими. Например, мне не обязательно видеть имя внутреннего объекта в качестве "заголовка" действия - вместо этого я хотел бы видеть что-то более информативное.

  2. Отображать значения определенных свойств под текстом заголовка. Я хотел бы видеть значения некоторых свойств непосредственно под заголовком, чтобы мне не приходилось искать где-то еще (а именно, в окне свойств) .

  3. Предоставьте настраиваемые области перетаскивания и нарисуйте собственные внутренние стрелки. В качестве примера я хотел бы иметь возможность иметь настраиваемые области перетаскивания в очень определенных местах.


Что я выяснил на данный момент:

Я создал специальный класс конструктора, производный от SequentialActivityDesigner, следующим образом:

[Designer(typeof(SomeDesigner))]
public partial class SomeActivity: CompositeActivity
{
    ...
}

class PlainDesigner : SequentialActivityDesigner
{
    ...
}

Переопределив некоторые свойства и метод OnPaint, я узнал о следующих соответствиях между свойствами и тем, как будет отображаться активность:

Диаграмма, показывающая отношения между некоторыми свойствами SequentialActivityDesigner и отображаемым действием.
Рисунок 1. Связь между некоторыми свойствами SequentialActivityDesigner и отображаемым действием.

Возможные решения для цели №1 (сделать действия менее техническими) и цели №2 (отображать значения свойств под текстом заголовка):

  • Отображаемый заголовок можно изменить с помощью свойства Title.

  • Если для отображения дополнительной информации под заголовком требуется больше места, свойство TitleHeight можно увеличить (т. Е. Переопределить свойство и заставить его возвращать base.TitleHeight + n, где n - некоторое положительное целое число).

  • Переопределите метод OnPaint и нарисуйте дополнительный текст в области, зарезервированной через TitleHeight.


Открытые вопросы:

  • Для чего используются разъемы, соединения и точки подключения? Они кажутся необходимыми, но для чего?

  • Хотя цели перетаскивания могут быть достигнуты с помощью метода GetDropTargets, кажется, что это не обязательно то место, где дизайнер будет размещать отброшенные действия. Когда действие перетаскивается по рабочему процессу, конструктор отображает маленькие зеленые знаки плюса, где действия можно отбросить; как он определяет расположение этих знаков плюса?

  • Как дизайнер определяет, где провести соединительные линии и стрелки?


person Community    schedule 25.04.2010    source источник


Ответы (1)


Если у вас нет действительно, действительно веской причины вливать огромные суммы (а это будет огромное) в WF 3.5, тогда не делайте этого. Вместо этого используйте WF4. WF4 дает вам гораздо больше контроля над внешним видом действий, отображаемых с помощью Xaml от WPF.

WF 3.5 был очень техничным и очень пугающим для пользователя. WF4 предназначен для решения этих проблем и, кажется, соответствует вашим целям.

person Community    schedule 25.04.2010
comment
Вы правы, это было бы то, что мне нужно. И я понимаю, что настройка WF 3.5 требует очень много времени (усугубляется тем, что почти нет информации о том, как это сделать). Единственное, что сейчас удерживает меня от WF 4, это то, что у меня нет доступной версии Visual Studio 2010, поддерживающей WF. Нет пакета дополнений WF 4 для VS 2008, или он есть? - person stakx - no longer contributing; 25.04.2010
comment
@staks: Нет, WF4 требует .NET 4 и, следовательно, VS2010 - person AnthonyWJones; 25.04.2010