Как получить ссылку на саму связанную деятельность, когда она была выбрана на дизайнере? - PullRequest
0 голосов
/ 16 ноября 2011

Я добавляю обратный вызов

_workflowDesigner.Context.Items.Subscribe<Selection>(SelectionChanged);

в повторно размещенном конструкторе и пытаюсь найти соответствующее действие в обратном вызове.Тогда я предполагаю, что мог бы добавить некоторый обработчик событий, чтобы предложить пользователю способ манипулировать некоторым его свойством.(т. е. добавить обработчик событий

(target as WorkflowViewElement).PreviewKeyDown += new KeyEventHandler(DoSomeWorkBySomeKeyDown);

) Но этот способ выглядит неработающим, действие не может быть найдено (Выбор выбора).

Я также пытался добавить обработчик событий в следующемкод, но он работает только после того, как активность была добавлена ​​в WF.После того, как вы щелкнете по другому контейнеру действий, затем снова выберите действие, обработчик событий будет потерян и больше не будет запускаться.

public sealed class WrappedCodeActivity : IActivityTemplateFactory
{
    private CodeActivityAbc codeActivityAbc = new CodeActivityAbc() { DisplayName = "abc" };

    public WorkflowViewElement oneWorkflowViewElement;

    public Activity Create(DependencyObject target)
    {
        oneWorkflowViewElement = (WorkflowViewElement)target;

        (target as WorkflowViewElement).PreviewKeyDown += new KeyEventHandler(DoSomeWorkBySomeKeyDown);

        return codeActivityAbc;
    }
.  .  .

Кто-нибудь имел какие-либо идеи по этому поводу?Пожалуйста, оставьте любую мысль, которая у вас есть.

1 Ответ

1 голос
/ 16 ноября 2011
_workflowDesigner.Context.Items.Subscribe<Selection>(selection =>
{
    foreach (var item in selection.SelectedObjects)
    {
        Console.WriteLine("Activity of type: " + item.ItemType + " selected.");

        if (item.ItemType == typeof(Sequence))
        {
            // Get Sequence object
            var seq = item.GetCurrentValue() as Sequence;

            // Add variable to Sequence
            seq.Variables.Add(new Variable<int>("NewIntegerVar", 10));
        }
    }
});
...