Добавление текста в связанный текстовый блок

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

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

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

" My title "

Я хочу показать:

This is "My title"

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 6

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

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

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

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