首页 > 解决方案 > UWP ContentControl 未在其内容中显示空格

问题描述

我正在尝试在堆栈面板中添加内容控件,如下面的代码片段所示

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

在上面的代码中,内容后的空格(“###”),在第二个内容控件中没有显示在结果中。

请参考下面的截图

截屏

注意上图中,### 后面没有空格。

谁能告诉我,这是 ContentControl 的行为还是问题?

我的确切方案是将此面板添加为 ItemsControl 的 ItemsPanel。请参考以下代码

<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>

问候,肖比卡。

标签: uwpwhitespacebehavior

解决方案


XAML 会折叠一些空格,这就是无法显示尾随空格的原因。本文档详细解释了这一点。

对于您的代码,我建议您可以使用TextBlock来替换ContentControl,我们需要使用Runin TextBlock

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

&#160;是 XML 的转义字符,表示空格。


更新

请注意,这&#160;是一个 XML 转义字符,请不要在 C# 代码中使用它。在代码隐藏中,使用

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>

此致。


推荐阅读