2009-05-11 18 views
0

Ich habe ein Diagramm in WPF mit vielen Labels. Der Text auf diesen Etiketten wird dynamisch geladen und kann sich ändern. Wenn ich die Breite nur auf auto einstelle, können sich diese Beschriftungen überlappen, was den Text unlesbar macht.Größenänderung von Labels

Das Diagramm unterstützt mehrere Größen, wenn es also größer wird, dann werden die Balken neu skaliert und es gibt mehr Platz für Text. Jetzt möchte ich den Text an den verfügbaren Platz anpassen. Wenn es zu klein wird, möchte ich das Etikett nicht mehr anzeigen (ein Tooltip ist verfügbar, damit der Benutzer immer noch die erforderlichen Informationen erhält). Betrachte die Zeichenfolge "Case 1, blah blah", es ist wahrscheinlich nicht genug Platz, um die ganze Zeichenfolge anzuzeigen, sondern nur das erste Wort. In diesem Fall möchte ich, dass die Zeichenfolge "Fall 1 .." ist, wobei .. anzeigt, dass weitere Informationen im Tooltip enthalten sind.

Ich kann die verfügbare Länge für die Zeichenfolge bestimmen. Aber wie kann ich den Platz bestimmen, den ein einzelner Buchstabe einnehmen wird? Natürlich könnte ich auch nur die Größe des Labels ändern, aber dann würde es einfach die Zeichenfolge irgendwo abschneiden, was für den Benutzer wahrscheinlich nicht hilfreich ist (und hässlich aussieht).

Irgendwelche Ideen?

Antwort

1

Wenn Sie TextBlocks anstelle von Beschriftungen verwenden können, haben sie eine TextTrimming -Eigenschaft, die dies für Sie entweder zu dem nächsten Zeichen oder dem nächsten Wort tun wird.


Während Sie mit der TextTrimming Eigenschaft glücklich scheint, werde ich diese bearbeiten, um hinzuzufügen, dass das Steuerelement TextBox eine GetRectFromCharacterIndex Methode hat, dass Sie die Größe auf dem Bildschirm von einem oder mehreren Zeichen herausfinden, erlauben würde, solange Die Schrifteinstellungen entsprechen Ihrem Label. Dies kann nützlich sein, wenn Sie an bestimmten Stellen im Etikett und nicht am nächsten Zeichen/Wort schneiden möchten.

+0

Ich denke, TextTrimming ist, was ich gesucht habe, thx :) – Nils

0

Kein Experte in WPF, aber ich würde denken, dass Sie dies in Code statt XAML tun müssen.

Beginnen Sie mit dem Abrufen der tatsächlichen Pixelbreite des verfügbaren Platzes für den Text. Sehen Sie sich dann den Zeichensatz, den Punktabstand usw. an, der am XAML-Frontend verwendet wird, und berechnen Sie von dort aus die Pixelbreite, die pro Zeichen erforderlich ist.

Sie können auch die Zeichengrößen ändern und die Etikettenlänge verringern.

+0

thx für die Antwort, aber sonds ein bisschen zu kompliziert, werde ich die TextTrimming-Eigenschaft (siehe unten) – Nils

Verwandte Themen