WPF TextBlock.TextTrimming, das nicht mit ColumnDefinition mit automatischer Größe funktioniert

8

Ich verwende ein WPF-Gitter als Layout meines Fensters. Es hat zwei Spalten und eine beliebige Anzahl von Zeilen. Die erste Spalte wird speziell für Etiketten verwendet und die zweite Spalte wird für Benutzereingabefelder verwendet (z. B. TextBox, ComboBox usw.). Meine Anforderungen sind:

  1. Die erste Spalte muss eine Mindestbreite von 50 und eine maximale Breite von 180 haben.
  2. Die erste Spalte muss auf ihren Inhalt angepasst werden, außer wenn sie der ersten Anforderung widerspricht.
  3. Die zweite Spalte muss den gesamten verbleibenden Speicherplatz belegen.

Ich habe den XAML unten versucht:

%Vor%

Ich hatte gehofft, dass das Etikett der dritten Reihe, "Label, das nicht in 180 Einheiten passt", in etwas wie "Label, das gewonnen hat" gekürzt wird. Stattdessen wurde es an "Label That Will not" angeheftet, wobei die Hälfte des "t" fehlt.

Ich habe einen anderen Ansatz versucht, den ich irgendwo im Internet gefunden habe.

%Vor%

Am Ende funktionierte es bei Expression Blend (manchmal ...), aber nicht beim Ausführen der Anwendung. Beim Ausführen verschwanden alle Etiketten vollständig. Ich habe durch das Überwachungsfenster gesehen, dass alle TextBlocks eine tatsächliche Breite von 0 haben, während die LabelColumn.ActualWidth gleich 80 ist.

Welche anderen Optionen gibt es?

    
Bob 22.11.2010, 07:51
quelle

1 Antwort

7

Sie müssen die MinWidth und MaxWidth für den TextBlock festlegen, da das Festlegen von MinWidth und MaxWidth für Spaltendefinitionen beim Rendern nicht immer berücksichtigt wird. Die Verwendung von ActualWidth innerhalb von Bindungsausdrücken kann problematisch sein, da ActualWidth während mehrerer Render-Durchläufe festgelegt wird und unvorhersehbare Ergebnisse liefern kann

    
Dean Chalk 22.11.2010 08:50
quelle

Tags und Links