57

我想使用 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'); 目标属性是“内容”(类型“对象”)

有什么办法可以使这段代码工作吗?

4

3 回答 3

120

您无法绑定它,因为您试图将字符串绑定到无法工作的对象,因为 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>
于 2010-12-09T14:28:20.317 回答
7

对于那些想知道您也可以<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>
于 2016-11-24T22:35:20.460 回答
5
<Label>
   <AccessText>
      <MultiBinding StringFormat="{x:Static properties:Resources.MyText}">
         <Binding Path="MyObj.MyProp" Mode="OneTime"/>
      </MultiBinding>
   </AccessText>
</Label>

哪里Resources.MyText可以放“狐狸跳过{0}”之类的东西。

于 2017-02-10T13:28:48.420 回答