tutorial - Obtiene la posición absoluta del elemento dentro de la ventana en wpf
xaml c# tutorial español (4)
Me gustaría obtener la posición absoluta de un elemento en relación con el elemento ventana / raíz cuando se hace doble clic. La posición relativa del elemento dentro de su padre es todo lo que puedo llegar a parecer, y lo que estoy tratando de llegar es el punto relativo a la ventana. He visto soluciones de cómo obtener el punto de un elemento en la pantalla, pero no en la ventana.
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);
}
Establezca relativeToScreen
paramater en true
para ubicarlo desde la esquina superior izquierda de toda la pantalla o en false
para colocarlo en la esquina superior izquierda de la ventana de la aplicación.
Creo que lo que BrandonS quiere no es la posición del mouse en relación con el elemento raíz, sino la posición de algún elemento descendiente.
Para eso, está el método TransformToAncestor :
Point relativePoint = myVisual.TransformToAncestor(rootVisual)
.Transform(new Point(0, 0));
Donde myVisual
es el elemento que acaba de hacer doble clic, y rootVisual
es Application.Current.MainWindow o lo que sea que desee con respecto a la posición.
Hm. Mouse.GetPosition(IInputElement relativeTo)
especificar la ventana en la que hizo clic en 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 debe consultar la ventana no desde su propia clase, sino desde otro punto de la aplicación. En este caso Application.Current.MainWindow
te ayudará.
Para obtener la posición absoluta de un elemento de UI dentro de la ventana, puede usar:
Point position = desiredElement.PointToScreen(new Point(0d, 0d));
Si se encuentra dentro de un Control de usuario, y simplemente quiere la posición relativa del elemento UI 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;