StringFormat和带标签的多重绑定

Fil*_*dji 44 c# xaml string-formatting multibinding

我想使用StringFormat做这样的事情:

<Label x:Name="myLabel">
    <Label.Content>
        <Multibinding StringFormat="{}{0} - {1}">
            <Binding Path="Lib1" />
            <Binding Path="Lib2" />
        </MultiBinding>
    </Label.Content>
</Label>
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,我得到了这个错误:

MultiBinding失败,因为它没有有效的Converter.MultiBindingExpression:目标元素是'Label'(Name ='myLabel'); target属性是'Content'(类型'Object')

有没有办法使这个代码工作?

Leo*_*rke 104

你不能绑定它,因为你试图将一个字符串绑定到一个不能工作的对象,因为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>
Run Code Online (Sandbox Code Playgroud)

  • +1后一种解决方案也继承了标签的风格,如果你不能打扰"TextBlock"的风格,这是一个很小的奖励. (5认同)

Mar*_*ijn 6

对于那些想知道的人,您也可以<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>
Run Code Online (Sandbox Code Playgroud)


小智 5

<Label>
   <AccessText>
      <MultiBinding StringFormat="{x:Static properties:Resources.MyText}">
         <Binding Path="MyObj.MyProp" Mode="OneTime"/>
      </MultiBinding>
   </AccessText>
</Label>
Run Code Online (Sandbox Code Playgroud)

哪里Resources.MyText可以容纳诸如“狐狸跳过 {0}”之类的内容。