在xaml中绑定后是否可以添加更多字符?

时间:2011-02-09 16:07:21

标签: wpf xaml binding

我想知道什么,找不到任何相关主题。我有以下约束力:

Content="{x:Static resx:Resource.Form_OtherOption_Description}"

这会在标签中放置一个字符串。我问自己的是,如果我可以在绑定之后添加“:”,而不是在代码中,只需在xaml中添加。标签代表“名称:”。但是添加“:”作为绑定的一部分不是一种选择。

修改

我正在使用3.5版本

任何建议。

提前致谢。

7 个答案:

答案 0 :(得分:30)

您可以通过以下方式完成此任务:

<TextBlock Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description},
                         StringFormat={}{0}:}" />

编辑: <Label> s Content属性显然不尊重绑定的StringFormat属性。我发现的内容已移至ContentStringFormat上的<Label>媒体资源。

<Label Content="{x:Static resx:Resource.Form_OtherOption_Description}"
       ContentStringFormat="{}{0}:" />

答案 1 :(得分:19)

如果你使用的是WPF 4.0,你也可以这样做:

<TextBlock>
       <Run Text="{Binding SomeLabel}"/>
       <Run Text=":"/>
</TextBlock>

这实际上连接来自两个Run标记的两个字符串并复制到TextBlock.Text属性中!。

使用此方法,您甚至可以绑定到演示者中的不同属性,并将其显示在单个TexBlock中。看到这个很好的例子:

Can we concat two properties in data binding?

答案 2 :(得分:10)

您也可以将MultiBinding与StringFormat一起使用,例如:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="ID {0} Name: {1} Age: {2}">
            <Binding Source="{x:Static resx:SomeResx.ID}"/>
             <Binding Path="Name"/>
             <Binding Path="Age"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

您可以在内容控件TextBlock TextBlock.Text中使用它(抱歉,我无法获取上面显示的代码)

答案 3 :(得分:3)

尝试Binding的属性StringFormat - 它可以非常简单地完成你想要的任务。

答案 4 :(得分:3)

是的,你可以。在这里,我在windows phone中绑定文本(clouds.all)后添加“testing”。

<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}testing}"/>

答案 5 :(得分:2)

如果您在进度条中使用标签,则可以使用以下方式:

<Label x:Name="Progress" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" Foreground="White" Opacity=".7" 
       Content="{Binding Path=Value, RelativeSource={RelativeSource TemplatedParent}}" ContentStringFormat="{}{0}%">

通过这种方式,您可以通过添加%来可视化进度条的值。

答案 6 :(得分:0)

您可以创建一个转换器,它接受输入字符串并添加“:”。

public class AddStringToStringConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string input = value as string;
        string suffix = parameter as string;

        return input + suffix;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

的Xaml:

<Window.Resources>
    <local:AddStringToStringConverter x:Key="AddStringToStringConverter"/>
</Window.Resources>
...
<Label Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description}, Converter={StaticResource AddStringToStringConverter}, ConverterParameter=:}"/>

或类似的东西。试过它,它至少对我的来源起作用了。

如果你ConverterParameter中有空格等,你可以使用单引号来确保它不被处理。

编辑:哦,是的......是的......还有StringFormat我以前从未需要的,是的......