Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En el ejemplo WPFWFIntegration se muestra cómo crear una aplicación que usa las características de Windows Presentation Foundation (WPF) y Windows Workflow Foundation (WF) en un único documento XAML. Para ello, el ejemplo utiliza Windows Workflow Foundation y la extensibilidad de XAML.
Detalles de ejemplo
El archivo ShowWindow.xaml se deserializa en una actividad Sequence con dos variables de cadena que son manipuladas por las actividades de la secuencia ShowWindow y WriteLine. La actividad WriteLine genera en la ventana de la consola la expresión que asigna a la propiedad Text. La ShowWindow actividad muestra una ventana de WPF como parte de su lógica de ejecución. El DataContext de la ventana incluye las variables declaradas en la secuencia. Los controles de la ventana declaradas en la ShowWindow actividad usan el enlace de datos para manipular esas variables. Por último, la ventana contiene un control de botón. El evento del botón Click se gestiona por un ActivityDelegate llamado MarkupExtension que incluye una actividad CloseWindow. MarkUpExtension invoca la actividad contenida que proporciona, como contexto, cualquier objeto identificado por x:Name, así como el DataContext de la ventana contenedora. Por lo tanto, CloseWindow.InArgument<Window> se puede enlazar mediante una expresión que haga referencia al nombre de la ventana.
La ShowWindow actividad deriva de la AsyncCodeActivity<TResult> clase para mostrar una ventana de WPF y se completa cuando se cierra la ventana. La Window propiedad es de tipo Func<Window> que permite crear la ventana a petición para cada ejecución de la actividad. La Window propiedad usa un XamlDeferringLoader para habilitar este modelo de evaluación diferida. El FuncFactoryDeferringLoader permite que un XamlReader sea capturado durante la serialización y luego ser leído durante la ejecución de la actividad.
Una actividad bien escrita nunca bloquea el subproceso del programador. Sin embargo, la ShowWindow actividad no se puede completar hasta que se cierre la ventana en la que se muestra. La ShowWindow actividad logra este comportamiento derivando de AsyncCodeActivity, llamando al método BeginInvoke dentro del método BeginExecute y mostrando la ventana modalmente. El delegado se invoca a través de WPF SynchronizationContext. La actividad ShowWindow asigna la propiedad DataContext a la propiedad Window.DataContext para proporcionar acceso a los controles enlazados a datos a las variables en el ámbito.
El último punto de interés de este ejemplo es un MarkupExtension denominado DelegateActivityExtension. El ProvideValue método de esta extensión de marcado devuelve un delegado que invoca una actividad incrustada. Esta actividad se ejecuta en un entorno que incluye el contexto de datos de WPF y cualquier valor x:Name en el ámbito. En el método GenericInvoke, este entorno se proporciona a la actividad mediante una extensión SymbolResolver. Esta extensión se agrega a WorkflowInvoker que se utiliza a continuación para invocar la actividad incrustada cada vez que se invoca el delegado de la extensión de marcado.
Nota:
El diseñador predeterminado no admite la actividad ShowWindow; como tal, el archivo ShowWindow.Xaml no se muestra correctamente en el diseñador.
Ejecución del ejemplo
Con Visual Studio, abra el archivo de solución WPFWFIntegration.sln.
Para compilar la solución, presione Ctrl+Mayús+B.
Para ejecutar la solución, presione F5.
Escriba el nombre y el apellido en el cuadro de diálogo.
Cierre el diálogo y la consola repetirá su nombre.