【发布时间】:2011-08-30 09:01:03
【问题描述】:
我在 WPF 4 和 VB.net 中有一个项目。我需要更改标签中单词中单个字母的颜色(标签的内容变化很大)。我真的不确定这是否可能,但如果是的话,我将不胜感激帮助弄清楚如何。泰!
【问题讨论】:
我在 WPF 4 和 VB.net 中有一个项目。我需要更改标签中单词中单个字母的颜色(标签的内容变化很大)。我真的不确定这是否可能,但如果是的话,我将不胜感激帮助弄清楚如何。泰!
【问题讨论】:
标签是一个内容控件,因此标签内允许包含任何类型的内容。您可以通过类似的方式轻松满足您的要求
<Label>
<StackPanel Orientation="Horizontal">
<TextBlock Foreground="Red" Text="T"/>
<TextBlock Text="ext"/>
</StackPanel>
</Label>
【讨论】:
更简洁的方法是使用 TextBlock 的 flow-content-capabilites:
<Label>
<TextBlock>
<Run Text="L" Foreground="Green"/>
<Run Text="orem Ipsum"/>
</TextBlock>
</Label>
如果需要的话,这会稍微限制绑定。
【讨论】:
目前我发现的最干净的方法是使用TextEffect:
<Label>
<TextBlock Text="Search">
<TextBlock.TextEffects>
<TextEffect PositionStart="0" PositionCount="1" Foreground="Red"/>
</TextBlock.TextEffects>
</TextBlock>
</Label>
这会将“S”染成红色。如果需要动态,您当然可以绑定任何涉及的属性。
【讨论】:
我刚刚在我们的项目中实现了类似的东西,但这将是静态的 - 我不确定这是否是您需要的。您可以根据需要随时更改标签的内容,但最后总是会有一个红色的 *。我在项目中添加了这样的样式
<Style x:Key="RequiredFieldLabel"
TargetType="{x:Type Label}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
<TextBlock Text="*"
Foreground="red" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
然后您可以在项目中的任何地方的标签上使用此样式。
<Label Content="Enter Name:"
Style="{StaticResource RequiredFieldLabel}" />
【讨论】: