Saya ingin mendapatkan posisi absolut dari sebuah elemen dalam kaitannya dengan elemen jendela / root ketika diklik dua kali. Posisi relatif elemen dalam induknya adalah semua yang bisa saya capai, dan yang saya coba tuju adalah titik relatif ke jendela. Saya telah melihat solusi tentang cara mendapatkan titik elemen di layar, tetapi tidak di jendela.
wpf
wpf-positioning
BrandonS
sumber
sumber
Untuk mendapatkan posisi absolut dari elemen UI di dalam jendela, Anda dapat menggunakan:
Point position = desiredElement.PointToScreen(new Point(0d, 0d));
Jika Anda berada dalam Kontrol Pengguna, dan hanya ingin posisi relatif dari elemen UI dalam kontrol itu, cukup gunakan:
Point position = desiredElement.PointToScreen(new Point(0d, 0d)), controlPosition = this.PointToScreen(new Point(0d, 0d)); position.X -= controlPosition.X; position.Y -= controlPosition.Y;
sumber
Tambahkan metode ini ke kelas statis:
public static Rect GetAbsolutePlacement(this FrameworkElement element, bool relativeToScreen = false) { var absolutePos = element.PointToScreen(new System.Windows.Point(0, 0)); if (relativeToScreen) { return new Rect(absolutePos.X, absolutePos.Y, element.ActualWidth, element.ActualHeight); } var posMW = Application.Current.MainWindow.PointToScreen(new System.Windows.Point(0, 0)); absolutePos = new System.Windows.Point(absolutePos.X - posMW.X, absolutePos.Y - posMW.Y); return new Rect(absolutePos.X, absolutePos.Y, element.ActualWidth, element.ActualHeight); }
Atur
relativeToScreen
parameter ketrue
untuk penempatan dari sudut kiri atas seluruh layar ataufalse
untuk penempatan dari sudut kiri atas jendela aplikasi.sumber
RenderTransform
elemen, dan karena itu perlu mengetahui posisi absolut elemen di layar.Sejak .NET 3.0, Anda cukup menggunakan
*yourElement*.TranslatePoint(new Point(0, 0), *theContainerOfYourChoice*)
.Ini akan memberi Anda poin 0, 0 dari tombol Anda, tetapi ke arah wadah. (Anda juga dapat memberikan poin lain bahwa 0, 0)
Cek di sini untuk dok.
sumber
Hm. Anda harus menentukan jendela yang Anda klik di
Mouse.GetPosition(IInputElement relativeTo)
Kode berikut berfungsi dengan baik untuk sayaprotected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); Point p = e.GetPosition(this); }
Saya menduga bahwa Anda perlu merujuk ke jendela bukan dari kelasnya sendiri tetapi dari titik aplikasi lain. Dalam hal ini
Application.Current.MainWindow
akan membantu Anda.sumber