将文本添加到绑定的TextBlock

时间:2011-08-20 09:15:40

标签: wpf xaml data-binding textblock

我想将文本添加到绑定到文本块的结果中:

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

显示的文字是:

" My title "

我想要的是:

This is "My title"

6 个答案:

答案 0 :(得分:41)

您可以使用绑定的StringFormat属性:

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

查看此博客文章了解更多信息:WPF String.Format in XAML with the StringFormat attribute

答案 1 :(得分:8)

如果你想在绑定中这样做:

<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">

答案 2 :(得分:4)

您可以使用转换器执行此操作。

<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>

答案 3 :(得分:3)

您好,您可以写如下:

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

答案 4 :(得分:3)

只需使用StringFormat进行格式化。

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

答案 5 :(得分:0)

此处就效果而言,最好的方法是使用StringFormat Binding并将其分配给Text的{​​{1}}属性1}}。

但是,如果不考虑性能,并且首选XAML可读性,则另一种方法是在TextBlock内使用Run

TextBlock

此外,通过这种方式,您可以将不同的样式(文字/背景颜色,斜体/粗体字体,字体大小等)应用到<TextBlock Foreground="#FFC8AB14" FontSize="28"> This is <Run Text="{Binding Title}" /> </TextBlock> 的不同部分,这是您无法做到的使用TextBlock&#39; s Binding。这比具有不同文本/背景样式的多个StringFormat更有效。