2013-01-15 4 views
13

Hier ist meine TextBlock sWarum schneidet TextBlock endende Leerzeichen aus dem Text?

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock Text="6 or more characters, at least one letter and a number, " FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
    <TextBlock Text="no symbols" FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
</StackPanel> 

Und hier ist der Ausgang (Screenshot) enter image description here

Warum TextBlock Ordnungen endet Räume? Aber es funktioniert gut, wenn ich führende Räume gebe.

Antwort

16

Es sieht aus wie xml:space="preserve"sollte den Trick (siehe Preserving Whitespace in XAML), aber das scheint nicht in einem Windows Store App zu funktionieren (es funktioniert in WPF).

Wenn Sie die non-breaking Leerzeichen &#160; verwenden es

<TextBlock Text="6 or more characters, at least one letter and a number,&#160;&#160;&#160;&#160;&#160;&#160;&#160;" .... 

funktioniert Ich nehme an, Sie auf dem Text Eigenschaft Bau eines Wandlers könnten versuchen mit nicht-breaking Speicherplätze zu überprüfen Räume für Hinter und ersetzen - vorausgesetzt, Die Kürzung erfolgt nicht zu früh.

+0

nicht brechenden Raum tut den Trick, aber 'Raum' -Eigenschaft ist einfach zu tun :( –

+0

Update von WinRT 8.1. 'Xml: Raum' immer noch nicht funktioniert, und diese Lösung tut. –

+4

Dies (mit  ) scheint derzeit nicht auf einer Windows 10 Universal App zu funktionieren.Ich musste es einfach als Inhalt zwischen den öffnenden und schließenden Tags festlegen, anstatt die Text-Eigenschaft so einzustellen, dass sie korrekt gerendert wird. Versuchte eine Reihe anderer Varianten ohne Erfolg (\ u0020, #nbsp, etc.) – matthewsheets

3

try xml:space="preserve":

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock xml:space="preserve" Text="6 or more characters, at least one letter and a number, " FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
    <TextBlock xml:space="preserve" Text="no symbols" FontFamily="Segoe UI" Foreground="#000000" FontSize="13"/> 
</StackPanel> 
+0

+1 für Raumattribut. Aber das funktioniert nicht in Store-Anwendungen –

9

Gelöst mit <Run /> in einem <TextBlock />..

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock FontFamily="Segoe UI" Foreground="#000000" FontSize="13"> 
     <Run Text="6 or more characters, at least one letter and a number, " /> 
     <Run Text="no symbols" /> 
    </TextBlock> 
</StackPanel> 

Und Zeilenumbruch funktioniert noch

<StackPanel Orientation="Horizontal" Margin="0,3,0,0"> 
    <TextBlock FontFamily="Segoe UI" Foreground="#000000" FontSize="13" 
     Width="200" TextWrapping="Wrap"> 
     <Run Text="6 or more characters, at least one letter and a number, " /> 
     <Run Text="no symbols" /> 
    </TextBlock> 
</StackPanel> 

ich leicht Jims Lösung verwenden würde (# 160;), wenn Verpackung war kein Problem.

Denken Sie in Gedanken daran, wie HTML Leerzeichen behandelt und erhält. So behandelt und bewahrt XAML auch Leerzeichen. Du würdest natürlich denken, dass es in einem TextBlock wörtlicher gehandhabt wird, oder? Nun, es ist was es ist. Zumindest gibt es eine Lösung.

+0

+1 Gute Antwort :) –

+0

Jerry warum tat ich das eigentlich, wenn meine App im normalen Modus ist, sollte der Text ** '6 sein oder mehr Zeichen, mindestens ein Buchstabe und eine Zahl, keine Symbole "**" und im Schnappmodus mindestens 6 Zeichen oder mehr, mindestens ein Buchstabe und eine Zahl, keine Symbole "**. Ich hab's gemacht. Aber ich möchte, dass diese Texte aus '.resw' Datei kommen. Mit anderen Worten, wie würde ich Text in ** " ' ** genau wie '' –

+0

Ich habe eine ** [Frage im Zusammenhang mit diesem auch hier] (http://stackoverflow.com/q/14343376/468724) ** –

0

RichTextBlock scheint sowohl führende und nachfolgende Leerzeichen (in WP 8.1 WinRT) zu erhalten:

<RichTextBlock> 
<RichTextBlock.Blocks> 
    <Paragraph > 
    <Paragraph.Inlines> 
    <Run Text="trailing " /><Run Text="bbb" /><Run Text=" leading" /> 
    </Paragraph.Inlines> 
    </Paragraph> 
</RichTextBlock.Blocks> 
</RichTextBlock> 

Aber es scheint auch einen zusätzlichen Raum zwischen den Läufen zusätzlich zu der von denen, die Sie angeben hinzuzufügen.

1

Ich habe eine andere Lösung gefunden! Die \u+A0 funktioniert, wenn Sie auch die einstellen.

Ich weiß nicht, warum das sein würde, und es war eine totale Überraschung (Ich fügte das Feld hinzu, weil ich es gerade entdeckte, während auch an meinem 'Warum wird mein Text getrimmt in Universal Apps?' Problem).

Auch U+205F (mittlerer mathematischer Raum) funktioniert auch in Verbindung mit IsTextSelectionEnabled.

+0

Ab 2016-10-06 funktioniert der Trick "IsTextSelectionEnabled" nicht mehr, – rsclient