Цель этого поста:
Я понимаю, что Workflow Foundation не очень популярен в StackOverflow и что, вероятно, будет не так много ответов, или их вообще не будет. Этот пост предназначен для людей, пытающихся настроить внешний вид действий рабочего процесса с помощью пользовательских классов дизайнеров.
Цели:
Я пытаюсь создать собственный класс конструктора для операций Workflow, чтобы добиться следующего:
Сделать действия менее техническими. Например, я не хочу видеть внутреннее имя объекта в качестве «заголовка» действия - вместо этого я хотел бы увидеть что-то более описательный.
Отображение значений некоторых свойств под текстом заголовка. Я хотел бы видеть значения некоторых свойств непосредственно под заголовком, чтобы мне не пришлось искать в другом месте (а именно, в окне свойств).
Предоставление пользовательских областей перетаскивания и рисование внутренних внутренних стрелок. В качестве примера я хотел бы иметь возможность иметь собственные области перетаскивания в очень специфических местах.
Что я узнал до сих пор:
Я создал собственный класс конструктора, производный от 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
, кажется, что это не обязательно тот случай, когда дизайнер фактически будет помещать отброшенные действия. Когда действие перетаскивается через рабочий процесс, дизайнер отображает маленькие зеленые знаки плюс, где действия могут быть отброшены; как он определяет расположение этих плюсов?
Как дизайнер определяет, где нарисовать соединительные линии и стрелки?