2015-09-17 2 views
5

Если вы просто установите значение свойства текста в TextBlock, как «Пример      » (Обратите внимание, что 3 пробела на конце этой строки) , что показывает TextBlock в пользовательском интерфейсе, это просто «Пример».Как сохранить пробельные из TextBlock в UWP приложений

И после поиска решений в Интернете, я обнаружил, что есть способ решить эту проблему:

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

Приведенный выше код показывает использование Встраиваемый собственности TextBlock и &#160; в тексте протекании выводит на дисплей пробел правильно.

Однако им мой случай мне нужно установить свойство Text TextBlock в Code-за (или через DataBinding), трюк выше не работает, и это показывает Example&#160;&#160;&#160; в пользовательском интерфейсе.

Я попытался установить значение свойства «Использовать текст» по привязке данных, которое, как я думаю, может корректно отображать символ эвакуации, но свойство «Свойство выполнения» НЕ является зависимым свойством, поэтому у меня нет лучшего способа решить эту проблему.

(Тем не менее, я думаю, что использование набивка свойство TextBlock также трюк, чтобы сделать это, и он должен работать. Но есть ли лучший способ сделать это?)

ответ

6

Во-первых, Run.Textделает данные поддержки связывания.

Причина, по которой &#160; неверно печатает внутреннюю привязку данных, заключается в том, что она использует символы escape-символов XML.

Попробуйте использовать (char)160 вместо -

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

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

Вы можете попробовать установить xml:space свойство сохранять в ваш XAML

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

Спасибо, но это doens't работу в UWP приложениях. – JuniperPhoton

+0

Если вы делаете ' Hello<Запустить xml: space =" сохранить "> мир! 'пробел между * Hello * и * world * сохраняется тогда и только тогда, когда установлен атрибут' xml: space'. Итак, xml: space = "preserve" работает в UWP, но он действительно не распространяется из TextBlock для запуска, как ожидалось. Я думаю, что наиболее релевантная документация по этому вопросу - это [Обработка пробелов в XAML] (https://msdn.microsoft.com/en-us/library/ms788746%28v=vs.110%29.aspx). –

+0

Я недавно установил Visual Studio 2017 и заметил, что ошибка была исправлена, и теперь 'xml: space =" preserve "' работает как задокументированный: вы можете указать ее для любого родителя элемента '', такого как '' или даже '', и это остановит обрезку пробела и рушится внутри ''. –

Смежные вопросы