Me gustaría obtener la posición absoluta de un elemento en relación con la ventana / elemento raíz cuando se hace doble clic en él. La posición relativa del elemento dentro de su padre es todo a lo que puedo llegar, y lo que estoy tratando de alcanzar es el punto relativo a la ventana. He visto soluciones sobre cómo obtener el punto de un elemento en la pantalla, pero no en la ventana.
wpf
wpf-positioning
BrandonS
fuente
fuente
Para obtener la posición absoluta de un elemento de la interfaz de usuario dentro de la ventana, puede usar:
Point position = desiredElement.PointToScreen(new Point(0d, 0d));
Si está dentro de un control de usuario y simplemente desea la posición relativa del elemento de la interfaz de usuario dentro de ese control, simplemente use:
Point position = desiredElement.PointToScreen(new Point(0d, 0d)), controlPosition = this.PointToScreen(new Point(0d, 0d)); position.X -= controlPosition.X; position.Y -= controlPosition.Y;
fuente
Agregue este método a una clase estática:
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); }
Configure el
relativeToScreen
parámetro entrue
para colocarlo desde la esquina superior izquierda de toda la pantalla o enfalse
para colocarlo en la esquina superior izquierda de la ventana de la aplicación.fuente
RenderTransform
del elemento y, por lo tanto, necesita saber la posición absoluta del elemento en la pantalla.Desde .NET 3.0, simplemente puede usar
*yourElement*.TranslatePoint(new Point(0, 0), *theContainerOfYourChoice*)
.Esto le dará el punto 0, 0 de su botón, pero hacia el contenedor. (También puede dar otro punto que 0, 0)
Consulte aquí el documento.
fuente
Hm. Tienes que especificar la ventana en la que hiciste clic en El
Mouse.GetPosition(IInputElement relativeTo)
siguiente código funciona bien para míprotected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); Point p = e.GetPosition(this); }
Sospecho que necesita hacer referencia a la ventana no desde su propia clase sino desde otro punto de la aplicación. En este caso
Application.Current.MainWindow
te ayudará.fuente