StringFormatを使用して、次のような処理を行います。
<Label x:Name="myLabel">
<Label.Content>
<Multibinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</Label.Content>
</Label>
しかし、それは機能せず、代わりにこのエラーが発生しました:
有効なコンバータがないため、MultiBindingが失敗しました。 MultiBindingExpression:target element is 'Label'(Name = 'myLabel');ターゲットプロパティは 'Content'(タイプ 'Object')です
このコードを機能させる方法はありますか?
StringFormatはターゲットを文字列型にする必要があるため機能しないオブジェクトに文字列をバインドしようとしているため、これをバインドできません。これを回避するには、代わりにTextBlock(Textプロパティがあります)を使用するか、TextblockをLabelの子として配置します。
<Label x:Name="myLabel">
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label.Content>
</Label>
不思議に思う人のために、<Label.Content>
Leom Burkeの回答のタグ。これにより、さらに2行のコードが節約されます。
<Label x:Name="myLabel">
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label>
<Label>
<AccessText>
<MultiBinding StringFormat="{x:Static properties:Resources.MyText}">
<Binding Path="MyObj.MyProp" Mode="OneTime"/>
</MultiBinding>
</AccessText>
</Label>
どこ Resources.MyText
は、「Foxが{0}を飛び越える」のようなものを保持できます。