如何在 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】:

您使用的StringFormatBinding。你想做的是这样的

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 部分中的 括号是啥意思?

Binding 中的 WPF StringFormat 在后面的代码中不起作用

绑定 StringFormat 似乎无法正常工作

WPF中DataGrid控件怎么修改显示时间日期的格式

如何在 XAML 元素中使用 StringFormat?

如何在 XAML 中使用 StringFormat 显示逗号​​分隔的数字?