将文本添加到绑定的TextBlock

31

我想在一个数据绑定的文本块前面添加文本:

<TextBlock Text="{Binding Title}" />
显示的文本是:
"My title"

我想要展示的是:

This is "My title"
6个回答

62

4
当我的字符串是 "{0} Complete" 时,这个方法对我不起作用,我必须使用下面的答案 "{}{0} Complete"。 - JKennedy

12

如果您想在绑定中完成此操作:

<TextBlock Foreground="#FFC8AB14" FontSize="28">
    <TextBlock.Text>
        <Binding Path="Title">
            <Binding.StringFormat>
                This is "{0}"
            </Binding.StringFormat>
        </Binding>
    </TextBlock.Text>
</TextBlock>

元素语法需要转义引号。当引号只是用来标记插入的文本并且不应该出现在输出中时,这当然更容易:

<TextBlock Text="{Binding Title, StringFormat={}This is {0}}" Foreground="#FFC8AB14" FontSize="28">

5
你可以使用转换器完成此任务。
<TextBlock Text="{Binding Title, ConverterParameter=This is, Converter={StaticResource TextPrefixConverter}}" Foreground="#FFC8AB14" FontSize="28" />

转换器将简单地使用ConverterParameter前缀绑定值。
public class TextPrefixConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {                        
        String result = String.Empty;
        if ( parameter != null)
            result = parameter.ToString( );

        if (value != null)
            result += value.ToString( );

        return result;
    }
...
}

如果空格和/或引号是输出的一部分,那么这并不明显。如果是这样,转换器可以被更改为修剪空格和/或在构造字符串时添加引号。

另一种方法是:

<TextBlock Foreground="#FFC8AB14" FontSize="28" >
    <Run Text="This is " />
    <Run Text="{Binding Path=Title}" />       
</TextBlock>

4

你好,可以按照以下方式进行书写:

<TextBlock>
     <TextBlock>This is </TextBlock>
     <TextBlock Text="{Binding Title}"></TextBlock>
</TextBlock>

3

只需要使用StringFormat格式化字符串。

<TextBlock Text="{Binding Title,StringFormat='This is {0}'}" Foreground="#FFC8AB14" FontSize="28" />

1
这里在性能方面最好的方法是使用StringFormat进行Binding,并将其分配给TextBlockText属性。如果性能不是问题,且更喜欢XAML的可读性,则可以在TextBlock中使用Run另一种方法:
<TextBlock Foreground="#FFC8AB14" FontSize="28">
    This is <Run Text="{Binding Title}" />
</TextBlock>

此外,这种方式可以为TextBlock的不同部分应用不同的样式(文本/背景颜色,斜体/粗体字,字体大小等),而使用BindingStringFormat则无法实现。并且,这比使用具有不同文本/背景样式的多个TextBlock更加高效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接