2015-09-17 10 views
5

Jeśli po prostu ustawić wartość właściwości Text w TextBlock jako „przykładu      ” (Zauważ, że tam 3 spacje na końcu tego napisu) , co TextBlock pokazuje w interfejsie użytkownika to po prostu "Przykład".Jak zachować spacje z TextBlock w UWP aplikacji

A po poszukiwanie rozwiązań w internecie, stwierdziliśmy, że nie ma sposobu, aby rozwiązać ten problem:

<Border BorderThickness="1" 
     BorderBrush="#FFFF0202" 
     HorizontalAlignment="Center" 
     VerticalAlignment="Center"> 
    <TextBlock x:Name="t1"> 
     <Run Text="Example&#160;&#160;&#160;"/> 
    </TextBlock> 
</Border> 

Powyższy kod pokazuje zastosowanie Inline Własności TextBlock i &#160; w tekście prowadzony za wyświetlenie białe znaki poprawnie.

Jednak im moją sprawę muszę ustawić właściwość Text TextBlock w kodu źródłowego (lub za pośrednictwem DataBinding), sztuką powyżej nie działa i to widać Example&#160;&#160;&#160; w interfejsie użytkownika.

Próbowałem ustawić wartość właściwości tekstu Run przez powiązanie danych, ale myślę, że może poprawnie wyświetlać znak escape, ale właściwość Run's Text NIE jest właściwością zależności, więc nie mam lepszego sposobu na rozwiązanie tego problemu.

(Jednak myślę, że użycie nieruchomość wyściółka z TextBlock jest podstęp, aby to zrobić, i to powinno działać. Ale jest lepszy sposób to zrobić?)

Odpowiedz

6

Najpierw Run.Textrobi dane potwierdzają wiążące.

Powodem, dla którego &#160; nie drukuje się prawidłowo podczas wiązania danych jest to, że używa znaków kontrolnych XML.

Spróbuj użyć (char)160 zamiast -

public string TestString { get; set; } = "Example" + (char)160 + (char)160 + (char)160; 

<TextBlock> 
    <Run Text="{x:Bind TestString}" /> 
</TextBlock> 
1

Można spróbować ustawić właściwość xml:space zachować w Twój XAML

<TextBox Name="t1" 
     xml:space="preserve" 
     Text="Example " /> 
+1

Dzięki ale to doens't pracę w UWP aplikacji. – JuniperPhoton

+0

Jeśli wykonasz ' Hello świat! 'spacja między * Hello * i * świat * jest zachowywana, jeśli i tylko jeśli ustawiony jest atrybut' xml: space'. Tak więc xml: space = "preserve" działa w UWP, ale faktycznie nie jest propagowane z TextBlock do uruchomienia zgodnie z oczekiwaniami. Myślę, że najbardziej odpowiednią dokumentacją na ten temat jest MSDN [Whitespace Processing in XAML] (https://msdn.microsoft.com/en-us/library/ms788746%28v=vs.110%29.aspx). –

+0

Niedawno zainstalowałem Visual Studio 2017 i zauważyłem, że błąd został naprawiony, a teraz 'xml: space =" zachowaj "' działa w sposób udokumentowany: możesz go podać na dowolnym obiekcie nadrzędnym elementu '', na przykład '' lub nawet '' i to zatrzyma białe przycinanie i zwijanie przestrzeni wewnątrz ''. –

Powiązane problemy