Wie Messe ich die Größe von einem TextBlock in WPF, bevor es gerendert wird?
Ich habe eine WPF DataTemplate mit zwei TextBlock-Steuerelemente (gestapelt) und dann einige andere Elemente unter. Durch eine komplizierte layout-code, die ich brauche, um zu wissen, die Höhe der zwei TextBlock-Elemente so, dass ich zeichnen kann, einige Phantasie-Anschluss-Linien, Linie und andere Kontrollen, etc.
Wenn ich weiß, der text geht in die Textblöcke, und ich weiß, die schriftart, etc., gibt es eine Möglichkeit, kann ich das berechnen oder Messen Sie die Höhe dieser Textblöcke, ohne tatsächlich rendering?
InformationsquelleAutor Scott Whitlock | 2010-06-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es sollte ausreichen, zu nennen, die
UIElement.Maß(Größe)
- Methode und anschließend überprüfen Sie dieUIElement.DesiredSize
Eigenschaft. Für weitere Informationen, Lesen Sie die mitgelieferten MSDN-links.TextOptions.FormattingMode
-- stellen Sie sicher, dass der Wert dieser Eigenschaft auf das Objekt, das Sie sind die Messung entspricht dem Wert des Objekts, das Sie Rendern (wenn Sie nicht die gleichen).Hatte gerade das gleiche Problem und nur zum telefonieren
textblock.Measure(new Size());
ist nicht genug. Ich musstetextblock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
um ein Ergebnis zu bekommen fürtextblock.DesiredSize
Denken Sie daran, dass
MinWidth
müssen auf 0 gesetzt werden, undMaxWidth
eingestellt positiveinfinity gibt, vor der Messung, sonst wird es begrenzt durch diese Werte.InformationsquelleAutor gehho
Den Aufruf
UIElement.Measure(Size)
nimmt als parameterSize
. Der zweite AufrufUIElement.DesiredSize
gibt, wasSize
Sie ging in dieMeasure
Methode.Ich denke, dies ist der Fall, weil
UIElement
(TextBlock
in diesem Fall) ist NICHT ein Kind von einem Steuerelement (noch) und daherDesiredSize
hat keinen Grund zu sein, etwas anderes.InformationsquelleAutor xJonx
Ich Schätze, dass das eher eine alte Frage, aber ich habe festgestellt, dass mit dem folgenden code
dsrdSize zurückgegeben wird, wie {47.05,15.96}.
Der trick scheint zu sein dass die msrSize größer als die zu erwartenden tatsächlichen Größe. msrSize scheint zu handeln wie ein limit für die DesiredSize ( - ) Ergebnis.
Zum Beispiel mit msrSize = new Size(10, 10), die Ergebnisse in einem dsrdSize {10,10} hier.
Hoffe, das jemand hilft.
InformationsquelleAutor jetbadger
InformationsquelleAutor Bill Moore