Ich habe mit Silverlight viele Probleme, mit dem Layout umzugehen. Hauptsächlich kann ich keine Möglichkeit finden, die Größe von Zeichenketten vorherzusagen, bevor sie tatsächlich gezeichnet werden. Auf dem iPhone haben wir einige sehr einfache Methoden, die es uns ermöglichen, die Größe zu bestimmen, die eine Zeichenfolge auf dem Bildschirm einnehmen wird, basierend auf der Schriftgröße, der Wortumbruchoption und der verfügbaren Breite und / oder Höhe. Aber mit Silverlight kann ich keine konsistenten Ergebnisse in meiner App erzielen.
Ich verwende derzeit ActuelHeight und ActualWidth einer TextBlock-Instanz, aber es liefert mir zufällige Ergebnisse. Zum Beispiel benutze ich den folgenden Code ...
%Vor%... h ist auf 66 Pixel eingestellt! Wie Sie selbst erraten können, ist es unmöglich, dass ein so langer Text auf ein Rechteck von 456 Pixel Breite und 66 Pixel Höhe passt. Und es wird bestätigt, wenn ich den Textblock innerhalb eines Canvas hinzufüge, seine Größe auf {456; 66} setze und die App teste: Der Text passt überhaupt nicht auf den Textblock!
Kann mir jemand erklären, wo das Problem liegt, und mich auf eine konsistente (und vertrauenswürdige) Methode zur Messung von Stringgrößen hinweisen?
Vielen Dank im Voraus,
Eric.
Sie können die TextBlock
bitten, sich selbst zu messen (ohne dass sie noch angezeigt wird), indem Sie ihre Methode Measure
aufrufen:
Natürlich darf es keine unendliche Breite und Höhe haben. Abhängig von Ihrem Anwendungsfall möchten Sie vielleicht Ihr Root-Element bitten, sich selbst zu messen, was wiederum alle Kinder (einschließlich TextBlock
) messen wird.
Versuchen Sie nach Möglichkeit, ein Design zu erstellen, bei dem Sie die physikalische Größe eines Textblocks nicht kennen müssen. Verwenden Sie ein Scroll-Design und dynamische Größenanpassung, um dies nicht zu wissen.
Wenn Sie dies jedoch wirklich wissen müssen, können Sie diesen Trick vom Desktop aus versuchen (wo es nicht möglich war, MeasureText - Sorry wird in Silverlight nicht unterstützt. Fügen Sie den Textblock der Benutzeroberfläche hinzu, aber außerhalb des sichtbaren Bereichs oder hinter einem anderen Steuerelement. Sie könnten dann die tatsächlich wiedergegebene Größe erhalten.
Der TextBlock wird nicht skaliert, bis er tatsächlich angezeigt wird ...
Für den Rest denke ich, das ist eine Frage des Designs. In einer XAML-Umgebung sollten Sie Pixelgrößen nicht sehr oft kennen / einstellen.
Danke für eure Hilfe, meine erste Methode hat funktioniert! Aber ich habe vergessen, die fontSize vor dem Abrufen von ActualHeight zu setzen - und es wurde automatisch von dem Elternteil festgelegt, der dem visuellen Baum hinzugefügt wurde! Also 66 Pixel war eigentlich die richtige Höhe meines Textblocks mit der kleinen Schriftgröße, die standardmäßig vom Textblock verwendet wird. Nach dem Hinzufügen zum visuellen Baum war die Schriftgröße des Textblocks viel größer, was zum Ausschneiden führte.
Nochmals vielen Dank für Ihre Hilfe!
Tags und Links silverlight windows-phone-7