StringFormat и Multibinding с меткой
Я хотел бы использовать StringFormat, чтобы сделать следующее:
<Label x:Name="myLabel">
<Label.Content>
<Multibinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</Label.Content>
</Label>
Однако это не работает, и я получил эту ошибку:
Ошибка MultiBinding, потому что у нее нет действительного конвертера. MultiBindingExpression: целевой элемент - это "Label" (Name= 'myLabel'); target - это "Content" (тип "Object" )
Есть ли способ заставить этот код работать?
Ответы
Ответ 1
Невозможно связать это, потому что вы пытаетесь привязать строку к объекту, который не работает, потому что 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>
Ответ 2
Для тех, кто задается вопросом, вы также можете оставить тег <Label.Content>
от Leom Burke. Это сохраняет еще две строки кода.
<Label x:Name="myLabel">
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Label>
Ответ 3
<Label>
<AccessText>
<MultiBinding StringFormat="{x:Static properties:Resources.MyText}">
<Binding Path="MyObj.MyProp" Mode="OneTime"/>
</MultiBinding>
</AccessText>
</Label>
Где Resources.MyText
может содержать что-то вроде "Фокс прыгает через {0}".