【问题标题】:How to use variable text in a Binding StringFormat?如何在 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 中有一个很好的方法,我也很高兴!

谢谢

【问题讨论】:

    标签: c# wpf xaml binding string-formatting


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      相关资源
      最近更新 更多