Laden...

Mouseposition bei Click relativ zum Grid

Erstellt von SyntaxTalksToMe vor 4 Jahren Letzter Beitrag vor 4 Jahren 908 Views
S
SyntaxTalksToMe Themenstarter:in
17 Beiträge seit 2017
vor 4 Jahren
Mouseposition bei Click relativ zum Grid

Moin,

mein Ziel ist es, bei einem Mouseclick auf dem Grid einen Button an der Stelle wo der Mauszeiger ist zu erstellen.

Das funktioniert auch, nur leider ist der Button immer versetzt. Hier ist mal der Code:

private void MyGrid_MouseDown(object sender, MouseButtonEventArgs e)
        {      

            System.Windows.Point mouseClickPosition = Mouse.GetPosition(myGrid);

            if (createDoorModus)
            {
                Button newDoor = new Button();
                newDoor.Width = 50;
                newDoor.Height = 35;

                newDoor.Margin = new Thickness(mouseClickPosition.X, mouseClickPosition.Y, 0,0);
                
                myGrid.Children.Add(newDoor);
            }

        }

Ich bin mir fast sicher, dass es beim festlegen der Thickness an der Right und Bottom Property liegt. Denn je weiter ich mich beim Klicken dem rechten und unteren Rand nähere, desto weniger versetzt ist der Button zum Mauszeiger.

Aber wie kann ich das umgehen? Gibts da evtl einen Trick? Ansonsten müsste ich halt die Werte über die Width und Height des Grides ausrechnen.

4.930 Beiträge seit 2008
vor 4 Jahren

Die Margin hat nichts mit der Position zu tun!

In einem Grid setzt du die Position mittels Grid.SetColumn und Grid.SetRow, s.a. Beispiel bei Grid.

Wenn du ein Element komplett frei (pixelgenau) positionieren willst, dann benötigst du ein Canvas.

S
SyntaxTalksToMe Themenstarter:in
17 Beiträge seit 2017
vor 4 Jahren

Ja, es sollte pixelgenau sein. Zufälligerweise liegt gerade ein Canvas in dem Grid rum 😃

Obwohl ich dem Canvas einen x:Name gegeben habe, kann ich nicht von außen zugreifen. Ich nehme an, ich muss dann erstmal das Canvas suchen.

Wie läuft dass dann ab über ein Canvas?

S
SyntaxTalksToMe Themenstarter:in
17 Beiträge seit 2017
vor 4 Jahren

Ok läuft. Habe das Childobjekt des Grids gesucht und das als relative Fläche genommen. Jetzt passen die Koordinaten.