Я хотел бы получить абсолютную позицию элемента по отношению к оконному / корневому элементу при двойном щелчке. Относительное положение элемента в родительском элементе - это все, что я могу понять, и я пытаюсь добраться до точки относительно окна. Я видел решения о том, как получить точку элемента на экране, но не в окне.
wpf
wpf-positioning
BrandonS
источник
источник
Чтобы получить абсолютное положение элемента пользовательского интерфейса в окне, вы можете использовать:
Point position = desiredElement.PointToScreen(new Point(0d, 0d));
Если вы находитесь в пользовательском элементе управления и просто хотите относительное положение элемента пользовательского интерфейса в этом элементе управления, просто используйте:
Point position = desiredElement.PointToScreen(new Point(0d, 0d)), controlPosition = this.PointToScreen(new Point(0d, 0d)); position.X -= controlPosition.X; position.Y -= controlPosition.Y;
источник
Добавьте этот метод в статический класс:
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); }
Набор В
relativeToScreen
параметре дляtrue
размещения с левого верхнего угла всего экрана или дляfalse
размещения в верхнем левом углу окна приложения.источник
RenderTransform
элемент, и поэтому ему необходимо знать абсолютное положение элемента на экране.Начиная с .NET 3.0, вы можете просто использовать
*yourElement*.TranslatePoint(new Point(0, 0), *theContainerOfYourChoice*)
.Это даст вам точку 0, 0 вашей кнопки, но в сторону контейнера. (Вы также можете указать другой балл, что 0, 0)
Проверьте здесь документ.
источник
Хм. Вы должны указать окно, в котором вы щелкнули.
Mouse.GetPosition(IInputElement relativeTo)
Следующий код хорошо работает для меняprotected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); Point p = e.GetPosition(this); }
Я подозреваю, что вам нужно обращаться к окну не из его собственного класса, а из другой точки приложения. В этом случае
Application.Current.MainWindow
вам поможет.источник