2012-06-27 4 views
1

이전에 (Get Absolute Position of element within the window in wpf)이 질문을 받았지만 아직 제대로 구현할 수 없었습니다. 부모 창에있는 컨트롤을 기준으로 자식 창이 열리려고합니다. 지금까지 나는 이것을 가지고있다. 이 자식 창 (messageWindow)의 위치에 영향을는하지만자식 창 위치 지정

messageWindow = new Message(true); 
Point relativePoint = btn1.TransformToAncestor(this).Transform(new Point(0, 0)); 
messageWindow.Left = relativePoint.X; 
messageWindow.Top = relativePoint.Y; 
messageWindow.Show(); 

지금, 부모의 btn1 제어 옆에/그것을 배치하지 않는 것 같습니다. 내가 가지고있는 또 다른 문제는 부모 창을 옮기면 원본을 닫은이 메서드를 호출한다는 것입니다. messageWindow 새 위치의 창은 이전 위치에 표시됩니다 (btn1이 새 위치 임에도 불구하고). 나는이 이상한 것을 발견하고 누군가가 내가 이것을 고칠 수 있는지 궁금해하고 있었다. 나는뿐만 아니라 전체 화면, 윈도우에서 제어 위치로 상대 설정하는 것을 설명하기위한 Charleh에

UPDATE

감사합니다. 이제 부모 창 위치를 화면에 표시하고 XY에 추가하는 문제입니다. 내가 어떻게 얻을 수 있니? 그냥이 코드를 시도 (비록 내가 솔직하게, 나는 그것을 이해하지 못한다) 버스는 여전히 매우 밀접하게 따르지 않는 것. 화면에서 Window 위치를 얻는 좋은 방법은 무엇입니까?;

messageWindow= new Message(true); 
Point relativePoint = btn1.TransformToAncestor(this).Transform(new Point(0, 0)); 
PresentationSource ScreenPos = PresentationSource.FromVisual(this); 

messageWindow.Left = relativePoint.X + (96.0 * ScreenPos.CompositionTarget.TransformToDevice.M11); 
messageWindow.Top = relativePoint.Y + (96.0 * ScreenPos.CompositionTarget.TransformToDevice.M22); 
messageWindow.Show(); 
+1

부모 창의 좌표를 고려하고 있습니까? 이것은 상대 위치를 제공합니다 - 절대 위치가 아닌 부모 창과 동일한 위치에 자식 창을 놓은 다음 relativePoint – Charleh

+0

@Charleh Oh ya를 사용하여 변환해야하는 것처럼 들립니다. 그것은 그것이 부모와 함께 움직이지 않은 이유를 이해합니다. 감사! – windowskm

답변

2

relativePoint 컨트롤의 놓으 Window-상대 아닌 스크린이다. LeftRight 점을 messageWindow (자식 창)으로 설정하면 부모 창이 아닌 상대이됩니다.

올바른 위치를 얻으려면 부모 창의 위치를 ​​찾은 다음 위치를 알려주는 창이 아니라 컨트롤이 화면과 관련된 위치를 찾기 위해 수학을 수행해야합니다 자식 창을 배치 할 위치를 지정합니다.

+0

좋은 소리가 나고 화면에서 창의 위치를 ​​얻으려면 어떻게해야합니까? – windowskm

+1

'this.Top'과'this.Left'는 데스크탑 (스크린)과 관련하여 창의 상단/왼쪽 가장자리를 가져옵니다. –

+0

Duh! 오늘 잠이 들었습니다. 고마워요 : D – windowskm