WPF:是否有一种类似于HTML span元素的XAML标记?

3

如果你是从ASP.NET过来的,那么WPF可能会让你感到困惑。我只想在标签旁边放一个红色的星号来表示必填字段。经过摸索,我发现以下代码可以实现这个效果:

<TextBlock Grid.Row="6" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Label Foreground="Red" Content="*" /><Label Content="Heavy Weight" />
</TextBlock>

考虑到我刚刚想出这个方法,我并不确定这是经验丰富的WPF开发者会采取的学术路线。 此外,此标记会在星号和标签之间放置大量空白。 在HTML中,span元素只会在其下一个同级元素旁边呈现。 我试着将标签放在标签中,但是VS2010一直在抱怨“属性'content'被设置多次”。

有什么想法吗?

3个回答

5
类似这样的内容更加合适:
<TextBlock Grid.Row="6" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Span Foreground="Red">*</Span>Heavy Weight
</TextBlock>

这里提供了TextBlock内容可以包含的概述,更具体的信息可以在这里查看。


4
另一种方法是:

<TextBlock Grid.Row="6" Height="28" HorizontalAlignment="Left" VerticalAlignment="Top">
    <Run Foreground="Red" Text="*" />
    <Run Text="Heavy Weight" />
</TextBlock>

顺便提一下,Damascus的解决方案增加了更多的UI元素。 使用CodeNaked的解决方案,很难将文本数据绑定。


忘了提到,只有在特定的 .NET 版本之后,Run 的 Text 属性才能进行数据绑定。 - krishnaaditya

1

这是因为您实际上将两个元素放在一起。您需要将它们放入一个容器中。

这是我最近编写的带有红色星号句子的示例代码:

<StackPanel  Orientation="Horizontal" Margin="5" >
            <TextBlock Text="Display name"/>
            <TextBlock Text="*" Foreground="Red" FontWeight="Bold" />
            <TextBlock Text=":"/>
        </StackPanel>

这里,所有的东西都在一个StackPanel中,所以属性'content'实际上只会被设置一次(如果您不指定像这个一样的组面板,那么您只需要添加一个元素)


这绝对是我一直在寻找的更加学术化的路线。然而,尽管更为适当,文本仍然全部挤在我的网格单元的左上角。当我将文本块更改为标签时,仍然存在空白区域。我认为这是一个填充问题。如果我将填充设置为0,该元素会尽可能地向下和向左移动。我想我可以只从左侧或右侧删除填充。我会进一步研究一下。 - oscilatingcretin
你的文本被固定在左上角是正常的,因为你指定了这个属性:HorizontalAlignment="Left" VerticalAlignment="Top"。将这两个值改为Center,它就能正常工作了。 - Damascus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接