XAML의 WPF 및 Windows Workflow Foundation 통합
WPFWFIntegration 샘플에서는 단일 XAML 문서에서 WPF(Windows Presentation Foundation) 및 Windows WF(Workflow Foundation) 기능을 사용하는 애플리케이션을 만드는 방법을 보여 줍니다. 이를 수행하기 위해 이 샘플에는 Windows Workflow Foundation 및 XAML 확장성이 사용됩니다.
샘플 세부 정보
ShowWindow
및 WriteLine
라는 시퀀스 활동을 통해 조작되는 문자열 변수 두 개를 사용하여 ShowWindow.xaml 파일을 Sequence 활동으로 역직렬화합니다. WriteLine 활동은 Text 속성에 할당되는 식을 콘솔 창에 출력합니다. ShowWindow
활동은 해당 실행 논리의 일부로 WPF 창을 표시합니다. 이 창의 DataContext에는 시퀀스에서 선언한 변수가 포함됩니다. ShowWindow
활동에 선언된 창의 컨트롤에서 데이터 바인딩을 사용하여 해당 변수를 조작합니다. 마지막으로, 창에 단추 컨트롤이 포함됩니다. 단추에 대한 Click
이벤트는 이름이 ActivityDelegate인 MarkupExtension
활동이 포함된 CloseWindow
에서 처리됩니다. MarkUpExtension
은 포함된 활동을 호출하고, 이 활동은 컨텍스트에 따라 x:Name
으로 식별되는 개체 및 해당 활동을 포함하는 창의 DataContext를 제공합니다. 따라서 창의 이름을 참조하는 식을 사용하여 CloseWindow.InArgument<Window>
를 바인딩할 수 있습니다.
ShowWindow
활동은 WPF 창을 표시하기 위해 AsyncCodeActivity<TResult> 클래스에서 파생되며, 창을 닫을 때 활동이 완료됩니다. Window
속성은 활동을 실행할 때마다 요청 시 창을 만들도록 허용하는 Func<Window>
형식입니다. 이와 같은 지연된 계산 모델을 위해 Window
가 XamlDeferringLoader 속성에 사용됩니다. FuncFactoryDeferringLoader
는 serialization 과정에서 XamlReader
를 캡처한 다음 활동을 실행하는 동안 이를 읽을 수 있도록 합니다.
활동을 제대로 작성하면 스케줄러 스레드가 차단되지 않습니다. 그러나 표시되어 있는 창을 닫지 않으면 ShowWindow
활동이 완료되지 않습니다. ShowWindow
활동에서는 이와 같은 동작을 달성하기 위해 AsyncCodeActivity로부터 파생하고 BeginInvoke 메서드에 BeginExecute 메서드를 호출하고, 창을 모달로 표시합니다. 대리자는 WPF SynchronizationContext를 통해 호출됩니다. ShowWindow
활동에서는 범위 내의 변수에 대한 데이터 바인딩된 컨트롤 액세스를 제공하기 위해 DataContext 속성을 Window.DataContext
속성에 할당합니다.
이 샘플에서 마지막으로 주목해야 할 부분은 MarkupExtension이라는 DelegateActivityExtension
입니다. 이 태그 확장의 ProvideValue
메서드는 포함된 활동을 호출하는 대리자를 반환합니다. 이 활동은 WPF 데이터 컨텍스트 및 범위 내의 모든 x:Name
값을 포함하는 환경에서 실행됩니다. GenericInvoke
메서드에서 이 환경은 SymbolResolver 확장을 통해 환경에 제공됩니다. 이 확장은 WorkflowInvoker에 추가되고, 이 호출자는 태그 확장의 대리자를 호출할 때마다 포함된 활동을 호출하는 데 사용됩니다.
참고 항목
기본 디자이너에서는 ShowWindow 활동을 지원하지 않으므로 ShowWindow.Xaml 파일이 디자이너에 올바르게 표시되지 않습니다.
샘플 실행
Visual Studio를 사용하여 WPFWFIntegration.sln 솔루션 파일을 엽니다.
솔루션을 빌드하려면 Ctrl+Shift+B를 누릅니다.
F5 키를 눌러 솔루션을 실행합니다.
대화 상자에 이름과 성을 입력합니다.
대화 상자를 닫으면 콘솔에 사용자의 이름이 표시됩니다.
.NET