StringFormat и многобингирование с меткой
-
10-10-2019 - |
Вопрос
Я хотел бы использовать StringFormat, чтобы сделать что -то так:
<Label x:Name="myLabel">
<Label.Content>
<Multibinding StringFormat="{}{0} - {1}">
<Binding Path="Lib1" />
<Binding Path="Lib2" />
</MultiBinding>
</Label.Content>
</Label>
Тем не менее, это не работает, и вместо этого я получил эту ошибку:
Многобиндирование не удалось, потому что у него нет достоверного преобразователя. MultibindingExpression: целевой элемент - «метка» (name = 'mylabel'); Целевое свойство - это «контент» (тип «объект»)
Есть ли способ заставить этот код работать?
Решение
Вы не можете связать это, потому что пытаетесь привязать строку с объектом, который не работает, потому что StringFormat требует, чтобы ее цель была типом строки. Вместо этого вы можете обойти это, используя текстовый блок (который имеет текстовое свойство) или поместив текстовый блок в качестве ребенка метки:
<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>
Тэг от ответа Леома Берка. Это сохраняет еще две строки кода.
<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}».