Добавление текста в связанный текстовый блок - PullRequest
21 голосов
/ 20 августа 2011

Я хотел бы добавить к результатам текст, связанный с текстовым блоком:

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

Текст, который отображается:

" My title "

То, что я хочу показать:

This is "My title"

Ответы [ 6 ]

41 голосов
/ 20 августа 2011

Вы можете использовать свойство StringFormat привязки:

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

Ознакомьтесь с этой записью в блоге для получения дополнительной информации: WPF String.Format в XAML с атрибутом StringFormat .

8 голосов
/ 20 августа 2011

Если вы хотите сделать это в привязке:

<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">
4 голосов
/ 20 августа 2011

Вы можете сделать это с помощью конвертера.

<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 голосов
/ 20 августа 2011

просто используйте StringFormat для форматирования.

<TextBlock Text="{Binding Title,StringFormat='This is {0}'}" Foreground="#FFC8AB14" FontSize="28" />
3 голосов
/ 20 августа 2011

Привет. Вы можете написать следующее:

<TextBlock>
     <TextBlock>This is </TextBlock>
     <TextBlock Text="{Binding Title}"></TextBlock>
</TextBlock>
0 голосов
/ 25 января 2017

Лучший подход здесь с точки зрения производительности , как уже отвечено, использует StringFormat для Binding и присваивает его свойству Text TextBlock.

Однако, если производительность не является проблемой, и предпочтение читаемости XAML, другой подход заключается в использовании Run внутри TextBlock:

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

Кроме того, таким образом вы можете применять различные стили (цвет текста / фона, курсив / полужирный шрифт, размер шрифта и т. Д.) К различным частям вашего TextBlock, чего вы не можете сделать с Binding х StringFormat. И это гораздо эффективнее, чем иметь несколько TextBlock с разными стилями текста / фона.

...