none
Position der Ecke links oben eines Grid im Verhältnis zum Window ermitteln RRS feed

  • Frage

  • Hallo,

    wie kann ich die (auch dynamische) Position des linken oberen Ecke eines Grid (nicht des LayoutRoot) im Verhältnis zum Application Window feststellen?

    Gibt es eine Lösung, die unabhängig davon ist, in welchem Container sich das Grid befindet?

    Und wie funktioniert das bei einem Custom Control, wenn also das Grid als oberstes Layout-Element eines Custom Controls fungiert?

    Hilfe wäre super.

     

    Beste Grüße,

    M.

    Montag, 9. November 2009 05:41

Antworten

  • Hallo zusammen,

     

    ich habe die Lösung mal wieder selbst gefunden. Für die, die den gleichen Bedarf haben hier meine Lösung:

     

    1. Alternative (Grid ist im visuellen Baum des Hauptapplikationsfensters):

     

    Private Sub btGetGridPosition_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btGetGridPosition.Click

     

        Dim position As Point = gdGridToExamine.TranslatePoint(New Point(0, 0), Window)

        MessageBox.Show("Position of this Grid: " + "X-Position: " + position.X.ToString + ". Y-Position " + position.Y.ToString)

     

      End Sub

     

    2. Alternative (Grid ist im visuellen Baum eines User Control, das sich wiederum im visuellen Baum des Hauptapplikationsfensters befindet):

     

    Zugriff auf das Hauptanwendungsfenster aus dem User Control heraus:

      

    Private Function GetParentWindow() As Window

     

        Dim RootWindow = App.Current.MainWindow

        Return LogicalTreeHelper.FindLogicalNode(RootWindow, RootWindow.GetValue(NameProperty))

     

      End Function


    Und dann die gleiche Routine wie oben:

     

    Private Sub btGetGridPosition_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btGetGridPosition.Click

     

        Dim instance As Window = GetParentWindow()

        Dim position As Point = LayoutRoot.TranslatePoint(New Point(0, 0), instance)

        MessageBox.Show("Position of this Grid: " + "X-Position: " + position.X.ToString + ". Y-Position " + position.Y.ToString)

     

      End Sub


    Beste Grüße,

    M. (LawBot)

     

    • Als Antwort markiert Martin Krüger Dienstag, 10. November 2009 09:03
    Dienstag, 10. November 2009 09:02