Partilhar via


Integração do WPF e do Windows Workflow Foundation em XAML

O exemplo WPFWFIntegration demonstra como criar um aplicativo que usa os recursos Windows Presentation Foundation (WPF) e Windows Workflow Foundation (WF) em um único documento XAML. Para fazer isso, o exemplo usa o Windows Workflow Foundation e a extensibilidade XAML.

Detalhes da amostra

O arquivo ShowWindow.xaml desserializa em uma Sequence atividade com duas variáveis de cadeia de caracteres que são manipuladas pelas atividades da sequência: ShowWindow e WriteLine. A WriteLine atividade produz para a janela do console a expressão que ela atribui à Text propriedade. A ShowWindow atividade exibe uma janela WPF como parte de sua lógica de execução. O DataContext da janela inclui as variáveis declaradas na sequência. Os controles da janela declarada na ShowWindow atividade usam a vinculação de dados para manipular essas variáveis. Finalmente, a janela contém um controle de botão. O Click evento para o botão é manipulado por um ActivityDelegate nome MarkupExtension que contém uma CloseWindow atividade. MarkUpExtension invoca a atividade contida que fornece, como contexto, quaisquer objetos identificados por um x:Name, bem como o DataContext da janela que contém. Assim, o pode ser encadernado CloseWindow.InArgument<Window> usando uma expressão que faz referência ao nome da janela.

A ShowWindow atividade deriva da AsyncCodeActivity<TResult> classe para exibir uma janela WPF e é concluída quando a janela é fechada. A Window propriedade é do tipo Func<Window> que permite que a janela seja criada sob demanda para cada execução da atividade. A Window propriedade usa a XamlDeferringLoader para habilitar esse modelo de avaliação adiada. O FuncFactoryDeferringLoader permite que a XamlReader seja capturado durante a serialização e, em seguida, lido durante a execução da atividade.

Uma atividade bem escrita nunca bloqueia o thread do agendador. No entanto, a ShowWindow atividade não pode ser concluída até que a janela que está exibindo seja fechada. A ShowWindow atividade alcança esse comportamento derivando de AsyncCodeActivity, chamando o BeginInvoke método no BeginExecute método e mostrando a janela modalmente. O delegado é invocado através do WPF SynchronizationContext. A ShowWindow atividade atribui a DataContext propriedade à Window.DataContext propriedade para fornecer qualquer acesso de controles ligados a dados às variáveis no escopo.

O último ponto de interesse nesta amostra é chamado MarkupExtensionDelegateActivityExtension. O ProvideValue método dessa extensão de marcação retorna um delegado que invoca uma atividade incorporada. Essa atividade é executada em um ambiente que inclui o contexto de dados do WPF e quaisquer x:Name valores no escopo. GenericInvoke No método, este ambiente é fornecido à atividade através de uma SymbolResolver extensão. Essa extensão é adicionada a um WorkflowInvoker que é usado para invocar a atividade incorporada sempre que o delegado da extensão de marcação é invocado.

Nota

O designer padrão não suporta a atividade ShowWindow; como tal, o arquivo ShowWindow.Xaml não é exibido corretamente no designer.

Executar o exemplo

  1. Usando o Visual Studio, abra o arquivo de solução WPFWFIntegration.sln.

  2. Para criar a solução, pressione Ctrl+Shift+B.

  3. Para executar a solução, pressione F5.

  4. Digite seu nome e sobrenome na caixa de diálogo.

  5. Feche a caixa de diálogo e o console ecoará seu nome.