如何在 Binding StringFormat 中使用可变文本?
Posted
技术标签:
【中文标题】如何在 Binding StringFormat 中使用可变文本?【英文标题】:How to use variable text in a Binding StringFormat? 【发布时间】:2014-08-22 11:51:03 【问题描述】:所以我想在绑定中有一个变量 StringFormat,但我不知道该怎么做。我不介意它是 XAML 还是背后的代码。这是我目前拥有的:
<TextBlock x:Name="TextBlockSpellSkill" Text="Binding CurrentValue, StringFormat=Spell: 0" />
但是,我希望能够根据模型中的变量将前缀“Spell:”更改为,例如“Skill:”。最简单的方法是,如果我可以在下面这样的代码中做到这一点:
if (true)
TextBlockSpellSkill.StringFormat = "Spell: 0";
else
TextBlockSpellSkill.StringFormat = "Skill: 0";
但我找不到任何方法来从代码隐藏中设置字符串格式。如果在 XAML 中有一个很好的方法,我也很高兴!
谢谢
【问题讨论】:
【参考方案1】:您使用的StringFormat
是Binding
。你想做的是这样的
var textBlock = new TextBlock();
var binding = new Binding("CurrentValue");
binding.StringFormat = "Spell : 0";
textBlock.SetBinding(TextBlock.TextProperty, binding);
【讨论】:
太棒了!对整个绑定范式和 XAML 语法仍然很陌生,因为它让我头疼:) 当它打开时我会接受 @Tevis 一开始会很困难,但你会看到绑定的美妙之处。继续做吧:)【参考方案2】:您可以通过多种方式做到这一点。一种方法是使用Style Trigger
。
<TextBlock x:Name="TextBlockSpellSkill" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="Binding CurrentValue, StringFormat=Spell: 0" />
<Style.Triggers>
<DataTrigger Binding="Binding SomeFlag" Value="True">
<Setter Property="Text" Value="Binding CurrentValue, StringFormat=Skill: 0" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
另一种选择是在绑定中使用ValueConverter。
【讨论】:
以上是关于如何在 Binding StringFormat 中使用可变文本?的主要内容,如果未能解决你的问题,请参考以下文章
Binding 语法的 StringFormat 部分中的 括号是啥意思?