|
VB.Net-Forum - Beitragsübersicht - |
|
Thema | V03: Autosize bei Label unter CANVAS |
Von |
stan |
Datum |
17. März 2016 um 22:42:33 |
Frage |
VB.NET 2016
HI,
ich habe ein CANVAS Feld und möchte darin via Code dynamisch Labels einfügen - die genau mittig beim Mauszeiger gesetzt werden Dim lab As Label lab = New Controls.Label lab.Content = "Hallo" cBoard.Children.Add(lab) Canvas.SetTop(lab, e.GetPosition(cBoard).Y) Canvas.SetLeft(lab, e.GetPosition(cBoard).X - (lab.Width / 2)) Allerdings hat das Label als Breite keinen vernüftigen Wert, wordurch die Berechnung der Mitte(lab.Width / 2) nur Müll liefert. Ich vermute, dass es am Canvas liegt - aber ich komm nicht dahinter. Kann mir jemand helfen?
Beste Grüße stan |
|
Antwort: |
Von |
Nico |
E-Mail |
nico.schertler@studentpartners.de |
Datum |
18. März 2016 um 08:17:05 |
Antwort |
Hallo,
die Breite des Labels ist nicht gesetzt (steht auf Auto). Deswegen nützt dir diese Eigenschaft nichts. Du bräuchtest die ActualWidth. Allerdings wird auch die noch keinen sinnvollen Wert haben, da direkt nach dem Erstellen noch kein Layout-Pass durchgeführt wurde. Die sauberste Variante ist, auf Abschluss des Layout-Passes zu warten:Dispatcher.BeginInvoke(Sub() Canvas.SetTop(lab, e.GetPosition(cBoard).Y) Canvas.SetLeft(lab, e.GetPosition(cBoard).X - (lab.ActualWidth / 2))) End Sub) Du kannst auch über die FormattedText Klasse die Breite des Labels abschätzen und damit rechnen. Übrigens ist für reinen Text die TextBlock Klasse gedacht.
Nico |
|
[ Antwort schreiben | Zurück zum VB.Net-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|