UWP ContentControl не показывает пространство в своем контенте - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь добавить элемент управления содержимым в стековую панель, как показано в следующем фрагменте кода

<StackPanel Orientation="Horizontal" >
        <ContentControl Content="Test 1"/>
        <ContentControl Content=" ### "/>
        <ContentControl Content="Test 2"/>
</StackPanel>

В приведенном выше коде пробел после содержимого ("###") во втором содержимомконтроль не отображается в результате.

Пожалуйста, обратитесь к скриншоту ниже

ScreenShot

Обратите внимание, что на изображении выше нет пробела после ###.

Может кто-нибудьпожалуйста, дайте мне знать, это поведение или проблема с ContentControl?

Мой точный сценарий - добавить эту панель как ItemsPanel ItemsControl. Пожалуйста, смотрите ниже код

<ItemsControl x:Name="itemsControl">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" >
                        <TextBlock Text="Test 1"/>
                        <TextBlock>
                            <Run Text=" ### "/>
                        </TextBlock>
                        <TextBlock Text="Test 2"/>
                    </StackPanel>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
        </ItemsControl>

С уважением, Шобика.

1 Ответ

0 голосов
/ 24 октября 2019

XAML сворачивает некоторые пробелы, поэтому завершающие пробелы не могут быть отображены. Этот документ объясняет это подробно.

Для вашего кода я предлагаю вам использовать TextBlock вместо ContentControl, нам нужно использовать Run in TextBlock:

<StackPanel Orientation="Horizontal">
    <TextBlock Text="Test 1"/>
    <TextBlock>
        <Run Text="&#160;###&#160;"/>
    </TextBlock>
    <TextBlock Text="Test 2"/>
</StackPanel>

&#160; - управляющий символ для XML, представляющий пробел.


Обновление

Обратите вниманиечто &#160; является escape-символом XML, пожалуйста, не используйте его в коде C #. В Code-behind используйте

textBlock.Inlines.Add(new Run() { Text = " #"+(char)160 }); 

Если вы решите создать элемент ItemsControl в коде сзади, пожалуйста, измените ItemsPanelTemplate из ItemsControl.

<ItemsControl x:Name="itemsControl">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

С наилучшими пожеланиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...