Если вам нужен уже заполненный рабочий процесс во время разработки со всеми вашими переменными и действиями, возможно, вы можете что-то потренировать с помощью IActivityTemplateFactory .
public class TwoActivitiesBundle : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
return new Sequence
{
Variables =
{
new Variable<int>("addResult"),
},
Activities =
{
new Add<int, int, int>
{
Left = 10,
Right = 10,
Result = new VisualBasicReference<int>("addResult")
},
new WriteLine { Text = "Now I'll use 'addResult', as a value on the next activity" },
new Subtract<int, int, int>
{
Left = new VisualBasicValue<int>("addResult"),
Right = 10,
},
new WriteLine { Text = new VisualBasicValue<string>("\"Print addResultValue: \" & addResult")}
}
};
}
}
Короче говоря, IActivityTemplateFactory позволяет отбрасывать уже созданные и заполненные действия в конструктор. Затем вы добавляете свою фабрику, в данном случае TwoActivitiesBundle , в панель инструментов дизайнера, как и любое другое действие:
new ToolboxItemWrapper(typeof(TwoActivitiesBundle), null, "My Bundle");
<ч />
Дополнительно:
Если вы действительно хотите добавить переменные в родительский контейнер, вы можете использовать параметр target
, полученный в методе Create()
, чтобы просмотреть рабочий процесс и найти такой контейнер.
Это пример, в котором предполагается, что вы опускаете TwoActivitiesBundle
внутри последовательности и добавляете в нее переменную:
public class TwoActivitiesBundle : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
var sequenceModelItem = (target as WorkflowViewElement).ModelItem;
sequenceModelItem
.Properties["Variables"]
.Collection
.Add(new Variable<string>("myFirstDesignTimeVariable", "var text here"));
// This activity writes "I've just created a new variable: var text here" to the console
return new WriteLine
{
Text = new VisualBasicValue<string>("\"I've just created a new variable: \" & myFirstDesignTimeVariable");
}
}
}
Как вы можете видеть здесь , ModelItem представляет отдельный элемент в модели редактирования . Таким образом, вы можете обойти весь рабочий процесс, используя свойства Root , Parent и Parents . Затем вы можете редактировать все свойства ModelItem так же, как я покажу вам на примере выше. Обратите внимание, что это довольно трудоемко и может потребовать от вас принять несколько предположений.