私は既にあなたの問題を解決していることは知っていますが、他の人に役立つ場合に見つけた解決策を投稿します。
基本的に、あなたはそれを得るために、あなたは初期化時にハンドラを追加することができ、Win32のからインポート機能としてSetWindowsPosは、この関数は、あなたのウィンドウのhWndをを必要とする署名
[DllImport("user32.dll", CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);
であることを宣言しなければなりませんあなたの窓の(たとえばあなたが「SourceInitialized」イベントをリッスンできる)と、クラスのprivateメンバにその値を格納します。
hwndSource = PresentationSource.FromVisual((Visual)sender) as HwndSource;
WPFは、デバイスに依存しないピクセルを管理するので、あなたはディップからにしても、コンバータを必要としますあなたのscの実際のピクセルreen。これは、これらの行で行われます。
var source = PresentationSource.FromVisual(this);
Matrix transformToDevice = source.CompositionTarget.TransformToDevice;
Point[] p = new Point[] { new Point(this.Left + e.HorizontalChange, this.Top), new Point(this.Width - e.HorizontalChange, this.Height) };
transformToDevice.Transform(p);
最後にあなたが呼び出すことができますSetWindowsPos:
SetWindowPos(this.hwndSource.Handle, IntPtr.Zero, Convert.ToInt32(p[0].X), Convert.ToInt32(p[0].Y), Convert.ToInt32(p[1].X), Convert.ToInt32(p[1].Y), SetWindowPosFlags.SWP_SHOWWINDOW);
を出典:
あなたはまだAPIを使用することができます。 – Code0987