다음을 통해 공유


XAML의 WPF 및 Windows Workflow Foundation 통합

WPFWFIntegration 샘플은 단일 XAML 문서에서 WPF(Windows Presentation Foundation) 및 WF(Windows Workflow Foundation) 기능을 사용하는 애플리케이션을 만드는 방법을 보여 줍니다. 이를 위해 샘플에서는 Windows Workflow Foundation 및 XAML 확장성을 사용합니다.

샘플 세부 정보

ShowWindow.xaml 파일은 두 개의 문자열 변수를 포함하는 Sequence 활동으로 변환되며, 이 변수들은 ShowWindowWriteLine 시퀀스의 활동에 의해 조작됩니다. 작업은 WriteLine 속성에 할당하는 식을 콘솔 창에 Text 출력합니다. 작업은 ShowWindow 실행 논리의 일부로 WPF 창을 표시합니다. DataContext 창에는 시퀀스에 선언된 변수가 포함됩니다. 활동에 선언된 ShowWindow 창의 컨트롤은 데이터 바인딩을 사용하여 해당 변수를 조작합니다. 마지막으로 창에 단추 컨트롤이 포함됩니다. Click 버튼의 이벤트는 ActivityDelegate 이름이 MarkupExtension이고 CloseWindow 활동을 포함합니다. MarkUpExtensionx:Name로 식별된 모든 개체를 컨텍스트로 제공하는 포함된 작업을 호출하고, 포함된 창의 DataContext도 제공합니다. 따라서 창의 CloseWindow.InArgument<Window> 이름을 참조하는 식을 사용하여 바인딩할 수 있습니다.

ShowWindow 활동은 AsyncCodeActivity<TResult> 클래스에서 파생되어 WPF 창을 표시하며, 창이 닫히면 완료됩니다. 속성 Window은 활동이 실행될 때마다 필요에 따라 창을 생성할 수 있는 Func<Window> 형식입니다. Window 속성은 XamlDeferringLoader을(를) 사용하여 지연된 평가 모델을 구현합니다. FuncFactoryDeferringLoader는 직렬화(capture) 과정 중에 그리고 작업 실행 중에 XamlReader를 캡처하고 읽을 수 있게 합니다.

잘 작성된 작업은 스케줄러 스레드를 차단하지 않습니다. 그러나 표시되는 창이 ShowWindow 닫혀야 활동을 완료할 수 있습니다. 이 ShowWindow 활동은 AsyncCodeActivity에서 파생되며, BeginInvoke 메서드에서 BeginExecute 메서드를 호출하고 창을 모달로 표시하여 이 동작을 수행합니다. 대리자는 WPF SynchronizationContext를 통해 호출됩니다. 활동은 ShowWindow 속성에 DataContext 속성을 할당하여 Window.DataContext 범위 내 변수에 대한 데이터 바인딩된 컨트롤 액세스를 제공합니다.

이 샘플에서의 마지막 관심 지점은 MarkupExtension에 있는 DelegateActivityExtension입니다. 이 태그 확장의 메서드는 ProvideValue 포함된 작업을 호출하는 대리자를 반환합니다. 이 작업은 WPF 데이터 컨텍스트 및 범위의 모든 x:Name 값을 포함하는 환경에서 실행됩니다. GenericInvoke 메서드에서 이 환경은 SymbolResolver 확장을 통해 활동에 제공됩니다. 이 확장은 태그 확장의 대리자가 호출될 때마다 포함된 활동을 호출하기 위해 사용되는 WorkflowInvoker에 추가됩니다.

비고

기본 디자이너는 ShowWindow 작업을 지원하지 않습니다. 따라서 ShowWindow.Xaml 파일이 디자이너에 올바르게 표시되지 않습니다.

샘플 실행

  1. Visual Studio를 사용하여 WPFWFIntegration.sln 솔루션 파일을 엽니다.

  2. 솔루션을 빌드하려면 Ctrl+ ShiftB+ 누릅니다.

  3. 솔루션을 실행하려면 F5 키를 누릅니다.

  4. 대화 상자에 이름과 성을 입력합니다.

  5. 대화 상자를 닫으면 콘솔에 사용자의 이름이 표시됩니다.