これは以前に尋ねられたことは知っていますが(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
私が抱えているもう1つの問題は、親ウィンドウを移動した場合、元のウィンドウを閉じたこのメソッドを思い出してmessageWindow
、ウィンドウの新しいインスタンスが古い位置に表示されることです(btn1
新しい位置にある場合でも)。私はこれが奇妙だと思い、誰かが私がこれを修正するのを手伝ってくれるかどうか疑問に思いました。
アップデート
画面全体ではなく、ウィンドウ内のコントロールの場所を基準にして設定しているだけだと説明してくれた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();