2009-02-04 8 views

답변

14

WPF에는 편리한 System.Windows.Forms가 포함되어 있지 않습니다. 화면 클래스를 사용할 수 있지만 해당 속성을 사용하여 WinForms 응용 프로그램에서 작업을 수행 할 수 있습니다. 일부 Button.Click처럼 WPF 창을 열도록 설정 어떤 코드 처리기

이 아래의 예에서 WPF 창을 참조하는 정의 변수입니다 _wpfWindow 윈폼 창 을 의미하는 것으로 가정합니다 (이 될 것입니다 핸들러) :

Screen screen = Screen.FromControl(this); 
_wpfWindow.StartupLocation = System.Windows.WindowStartupLocation.Manual; 
_wpfWindow.Top = screen.Bounds.Top; 
_wpfWindow.Left = screen.Bounds.Left; 
_wpfWindow.Show(); 

위의 코드가 윈폼 창을 포함하는 화면의 왼쪽 상단 모서리에있는 WPF 윈도우를 인스턴스화합니다. 화면 중앙과 같은 다른 위치에 배치하거나 WinForms 창의 오른쪽 아래에있는 "계단식"스타일에 배치하려는 경우 수학을 마치도록하겠습니다. 그것을 알아 내기 위해 마우스의 위치를 ​​사용하기 때문에

것 화면의 중앙에있는 WPF 창을 얻는 또 다른 방법은 단순히

_wpfWIndow.StartupLocation = System.Windows.WindowStartupLocation.CenterScreen 

그러나, 이것은 그다지 유연하지 사용하는 화면을 사용하여 WPF 창을 표시 할 수 있습니다 (그리고 사용자가 신속하게 이동하거나 기본 단추를 사용하는 경우 WinForms 앱과 다른 화면에 마우스가있을 수 있음).

편집 : Here's a link to an SDK document 비 -WPF 창을 중심으로 WPF 창을 가져 오기 위해 InterOp를 사용하는 것에 대해. 그것은 기본적으로 내가 수학을 계산하는 측면에서 설명했지만, 올바르게 당신이 창 HWND를 사용하여 WPF 창의 "소유자"속성을 설정할 수 있습니다.

1

System.Windows.Forms.Screen [1]을 사용하고 FromControl 메서드를 사용하여 양식의 화면 정보를 가져올 수 있어야합니다. 그런 다음이 위치를 찾으려는 화면을 기반으로 WPF 윈도우 (위, 왼쪽)를 배치 할 때이 옵션을 사용할 수 있습니다.

[1] WinForms dll을로드하지 않으면 Win32 MonitorFromRect 외에도 사용할 수 있습니다. 그러나 이미 winforms API를 사용하고 있으므로 메모리/퍼센티지를 지불하지 않을 것입니다.

6

가장 간단한 방법은 다음과 같습니다 (WindowStartupLocation.CenterOwner 사용).

MyDialogWindow dialogWindow = new MyDialogWindow(); 
dialogWindow.Owner = this; 
dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; 

dialogWindow.ShowDialog(); 

상호 운용성 또는 설정 윈도우 좌표 :

3

그 일을하는 또 다른 방법이 필요하다 :

WindowInteropHelper helper = new WindowInteropHelper(this); 

this.StartupLocation = System.Windows.WindowStartupLocation.Manual; 
this.Left = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Left; 
this.Top = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Top; 

이 당신의 WPF 창 = ...