web-dev-qa-db-ja.com

バインドされたTextBlockへのテキストの追加

テキストブロックにバインドされている結果にテキストを追加したいと思います。

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

表示されるテキストは次のとおりです。

" My title "

私が見せたいのは:

This is "My title"
24
Rhys

バインディングの StringFormat プロパティを使用できます。

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

詳細については、このブログ投稿を確認してください: StringFormat属性を持つXAMLのWPF String.Format

45
Shebin

バインディングでそれを行いたい場合:

<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">
9
H.B.

これはコンバーターで行うことができます。

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

書式設定の目的でStringFormatを使用するだけです。

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

こんにちはあなたは次のように書くことができます:

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

パフォーマンスに関するここでの最善のアプローチは、すでに回答したように、StringFormatBindingを使用し、それをTextTextBlockプロパティに割り当てることです。

ただし、パフォーマンスが問題ではなく、XAMLの可読性が望ましい場合は、別のアプローチとして、Run内でTextBlockを使用します。

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

また、この方法では、TextBlockのさまざまな部分にさまざまなスタイル(テキスト/背景色、斜体/太字フォント、フォントサイズなど)を適用できます。これは、BindingStringFormatでは実行できないことです。そして、これは、異なるテキスト/背景スタイルを持つ複数のTextBlockを使用するよりもはるかに効率的です。

0