WPF-TextBlock-Bindung mit <Zeilenumbruch/>
Ich habe einen TextBlock binden sich wie folgt in meine ControlTemplate.
<TextBlock Grid.Column="1" VerticalAlignment="Center"
FontSize="16" FontFamily="Arial" FontWeight="Bold"
Text="{Binding RelativeSource={RelativeSource TemplatedParent},Path=ButtonText}">
</TextBlock>
Wenn ich der Text neben den Menüeinträgen wie folgt , funktioniert es nicht. Es nicht angezeigt wird in der separaten Zeile.
ButtonText="Change<LineBreak/> Casette"
Wie man dieses Problem beheben? Zu schätzen Ihre Hilfe, bitte geben Sie mir mit Beispiel-code.
InformationsquelleAutor codematrix | 2010-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe diesen code zu erhalten, was Sie wollen. Das ist der XAML-Code:
- und das ist der code hinter. Um das Beispiel einfacher, ich glaube nicht, erstellen Sie eine ViewModel-Klasse:
Verwenden Sie diese Zeichenfolge: "Change
Cassette"
Leben wir wirklich in einem Alter, wo der carriage return ist noch notwendig? Warum kann es nicht einfach sein, ein einfaches '\n' - escape-Sequenz. Meine Tastatur nicht mit einem carriage return Anker mehr hat, und es nicht mehr geht ding.
InformationsquelleAutor Maurizio Reginelli
Einen
TextBlock
zeigt den Inhalt seinerInlines
Eigenschaft. DieText
Eigenschaft existiert nur als eine Bequemlichkeit (obwohl es ' s eine signifikante ein): wenn Sie dieText
Eigenschaft, dieTextBlock
erstellen einerRun
seine Inhalte, um die Zeichenfolge, die Sie haben, und speichern Sie es in derInlines
Sammlung.Wenn Sie den Inhalt einer
TextBlock
element in XAML, dieXamlReader
füllt dieInlines
Sammlung direkt, anstatt durch dieText
Eigenschaft. Es parst die text-Knoten inRun
Objekte und Elemente wie gewohnt für XAML. Also diese:wird behandelt, als wäre es tatsächlich dieser:
Beachten Sie, durch die Art und Weise, dass, wenn Sie versuchen, die
Text
Eigenschaft ausdrücklich:erhalten Sie eine Ausnahme, weil die
XamlReader
wird versuchen, erstellen Sie eineLineBreak
Objekt, und dieText
Eigenschaft kann nur eine Zeichenfolge enthalten.Ihre Bindung nicht so funktioniert, wie Sie es wollen, weil es ausdrücklich die Einstellung der
Text
- Eigenschaft auf eine Zeichenfolge. Dies nicht bekommen, analysiert, wie XAML (und gut so). Und was also ist die Anzeige in derTextBlock
ist der Inhalt von diesem string.So gibt es grundsätzlich zwei Möglichkeiten, das zu erreichen, was Sie versuchen zu erreichen. In deinem Fall kann man wohl nur Weg mit Einbettung eine Zeilenumbruch in den string.
Aber das ist schwieriger als es aussieht, wenn Sie es tun von XAML. Da XAML auf XML, und XML hat einige lustige Dinge zu whitespace. Sie sind OK, wenn Sie es explizit in einem Attribut mit XML-Entitäten, z.B.:
Aber das wird nicht funktionieren, wenn man es so machen:
weil der XML-parser normalisiert Leerräume im Inhalt eines Elements. Die CR/LF-pair-Mädchen wird sich in einem einzigen Raum, und das ist, was kommt in den text-Eigenschaft.
Wenn Sie verbindlich sind, müssen Sie nicht sorgen zu machen über dieses XML-Zeug (es sei denn, man bindet den Inhalt eines XML-Dokuments!). Sie können einfach
\r\n
in der Wert-Eigenschaft.Den anderen Weg, dies zu tun ist, um direkt Auffüllen der
TextBlock
'sInlines
Eigenschaft. Aber Sie können nicht dies tun, über die Bindung, daInlines
ist nicht eine Abhängigkeitseigenschaft - in der Tat, es ist read-only, und Sie können nur füllen Sie es durch aufrufen IhrerAdd
oderAddRange
Methoden.InformationsquelleAutor Robert Rossney