我知道這已被問到之前(Get Absolute Position of element within the window in wpf),但我還沒有能夠正確實施。我試圖在父窗口中打開一個相對於控件的子窗口。到目前爲止,我有這個;子窗口定位
messageWindow = new Message(true);
Point relativePoint = btn1.TransformToAncestor(this).Transform(new Point(0, 0));
messageWindow.Left = relativePoint.X;
messageWindow.Top = relativePoint.Y;
messageWindow.Show();
現在雖然這並不影響子窗口(messageWindow
)的位置,它似乎並沒有把它放在/父的btn1
控制旁邊。我的另一個問題是,如果我移動父窗口,然後回想一下已關閉原始窗口的新方法(即使btn1
處於新位置),窗口的新實例將顯示在舊位置。我覺得這很奇怪,想知道是否有人可以幫我解決這個問題。
UPDATE
感謝Charleh解釋,我只是將它們設置相對於控制位置的窗口,而不是整個屏幕。所以,現在是在屏幕上獲取父窗口的位置並將其添加到XY的問題。我怎麼得到這個?剛剛嘗試過這個代碼(雖然我會說實話,我不太明白),但總線似乎並不是非常密切。在屏幕上獲取窗口位置的好方法是什麼?
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();
您是否考慮了父窗口的座標?這隻給出了子窗口的相對位置 - 不是絕對位置,這聽起來像需要將子窗口放在與父窗口相同的位置,然後使用relativePoint – Charleh
@Charleh Oh ya進行轉換。這很有道理,爲什麼它不隨父母移動。謝謝! – windowskm