myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- GUI: WPF und Silverlight (https://www.mycsharp.de/wbb2/board.php?boardid=85)
--- Mouseposition bei Click relativ zum Grid (https://www.mycsharp.de/wbb2/thread.php?threadid=121777)


Geschrieben von SyntaxTalksToMe am 12.04.2019 um 17:19:
  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:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
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.


Geschrieben von Th69 am 12.04.2019 um 17:33:
 
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.


Geschrieben von SyntaxTalksToMe am 12.04.2019 um 18:24:
 
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?


Geschrieben von SyntaxTalksToMe am 12.04.2019 um 19:17:
 
Ok läuft. Habe das Childobjekt des Grids gesucht und das als relative Fläche genommen. Jetzt passen die Koordinaten.


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 20.09.2019 10:02