Je voudrais obtenir la position absolue d'un élément par rapport à l'élément window / root quand il est double-cliqué. La position relative de l'élément dans son parent est tout ce que je peux sembler atteindre, et ce que j'essaie d'arriver est le point relatif à la fenêtre. J'ai vu des solutions pour obtenir le point d'un élément sur l'écran, mais pas dans la fenêtre.
wpf
wpf-positioning
BrandonS
la source
la source
Pour obtenir la position absolue d'un élément de l'interface utilisateur dans la fenêtre, vous pouvez utiliser:
Point position = desiredElement.PointToScreen(new Point(0d, 0d));
Si vous êtes dans un contrôle utilisateur et souhaitez simplement la position relative de l'élément d'interface utilisateur dans ce contrôle, utilisez simplement:
Point position = desiredElement.PointToScreen(new Point(0d, 0d)), controlPosition = this.PointToScreen(new Point(0d, 0d)); position.X -= controlPosition.X; position.Y -= controlPosition.Y;
la source
Ajoutez cette méthode à une classe statique:
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); }
Définissez le
relativeToScreen
paramètre surtrue
pour le placement à partir du coin supérieur gauche de tout l'écran ou surfalse
pour le placement à partir du coin supérieur gauche de la fenêtre d'application.la source
RenderTransform
de l'élément, et par conséquent, il a besoin de connaître la position absolue de l'élément sur l'écran.Depuis .NET 3.0, vous pouvez simplement utiliser
*yourElement*.TranslatePoint(new Point(0, 0), *theContainerOfYourChoice*)
.Cela vous donnera le point 0, 0 de votre bouton, mais vers le conteneur. (Vous pouvez également donner un autre point que 0, 0)
Vérifiez ici pour le doc.
la source
Hm. Vous devez spécifier la fenêtre sur laquelle vous avez cliqué dans le
Mouse.GetPosition(IInputElement relativeTo)
code suivant fonctionne bien pour moiprotected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); Point p = e.GetPosition(this); }
Je soupçonne que vous devez vous référer à la fenêtre non pas depuis sa propre classe mais depuis un autre point de l'application. Dans ce cas
Application.Current.MainWindow
, vous aidera.la source