Дизайнеры нестандартных действий в Workflow Foundation 3.5: как они работают? - PullRequest
1 голос
/ 25 апреля 2010

Цель этого поста:

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


Цели:

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

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

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

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


Что я узнал до сих пор:

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

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

class PlainDesigner : SequentialActivityDesigner
{
    ...
}

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

Диаграмма, показывающая отношения между некоторыми свойствами SequentialActivityDesigner и отображаемым действием. http://img121.imageshack.us/img121/4230/activitydesigner.png
Рисунок 1. Связь между некоторыми свойствами SequentialActivityDesigner и отображаемой активностью.

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

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

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

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


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

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

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

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

1 Ответ

2 голосов
/ 25 апреля 2010

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

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

...