テキストブロックにバインドされている結果にテキストを追加したいと思います。
<TextBlock Text="{Binding Title}" Foreground="#FFC8AB14" FontSize="28" />
表示されるテキストは次のとおりです。
" My title "
私が見せたいのは:
This is "My title"
バインディングの StringFormat
プロパティを使用できます。
<TextBlock Text="{Binding Title, StringFormat=This is {0}}"></TextBlock>
詳細については、このブログ投稿を確認してください: StringFormat属性を持つXAMLのWPF String.Format 。
バインディングでそれを行いたい場合:
<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">
これはコンバーターで行うことができます。
<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>
書式設定の目的でStringFormatを使用するだけです。
<TextBlock Text="{Binding Title,StringFormat='This is {0}'}" Foreground="#FFC8AB14" FontSize="28" />
こんにちはあなたは次のように書くことができます:
<TextBlock>
<TextBlock>This is </TextBlock>
<TextBlock Text="{Binding Title}"></TextBlock>
</TextBlock>
パフォーマンスに関するここでの最善のアプローチは、すでに回答したように、StringFormat
にBinding
を使用し、それをText
のTextBlock
プロパティに割り当てることです。
ただし、パフォーマンスが問題ではなく、XAMLの可読性が望ましい場合は、別のアプローチとして、Run
内でTextBlock
を使用します。
<TextBlock Foreground="#FFC8AB14" FontSize="28">
This is <Run Text="{Binding Title}" />
</TextBlock>
また、この方法では、TextBlock
のさまざまな部分にさまざまなスタイル(テキスト/背景色、斜体/太字フォント、フォントサイズなど)を適用できます。これは、Binding
のStringFormat
では実行できないことです。そして、これは、異なるテキスト/背景スタイルを持つ複数のTextBlock
を使用するよりもはるかに効率的です。