2010-12-09 4 views
40

je voudrais utiliser StringFormat faire someting comme ceci:StringFormat et MultiBinding avec le label

<Label x:Name="myLabel"> 
    <Label.Content> 
     <Multibinding StringFormat="{}{0} - {1}"> 
      <Binding Path="Lib1" /> 
      <Binding Path="Lib2" /> 
     </MultiBinding> 
    </Label.Content> 
</Label> 

Cependant, il est ne fonctionne pas et j'eu cette erreur à la place:

MultiBinding a échoué parce que il n'a pas de convertisseur valide. MultiBindingExpression: l'élément cible est 'Label' (Name = 'myLabel'); la propriété target est 'Content' (type 'Object')

Est-il possible de faire fonctionner ce code?

Répondre

94

Vous ne pouvez pas lier cela parce que vous essayez de lier une chaîne à un objet qui ne fonctionnera pas car StringFormat requiert que sa cible soit un type chaîne. Vous pouvez contourner ce problème en utilisant soit un TextBlock à la place (qui possède une propriété de texte) ou mettre le Textblock comme l'enfant du 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> 
+1

C'est exactement ce que j'allais dire, et ce post le confirme aussi: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c60b90e6-8426-4c2b-a547-eaa92920862f – Tom

+1

Merci, je vais utiliser un TextBlock au lieu d'un Label. la première solution fonctionne aussi, mais je pense que la seconde est plus élégante. – Filimindji

+4

+1 Cette dernière solution hérite également du style de l'étiquette, ce qui est un petit bonus si vous ne pouvez pas prendre la peine de styler le 'TextBlock'. –

3

Pour ceux qui se demandent, vous pouvez également laisser l'étiquette <Label.Content> de la réponse de MOEL Burke . Cela économise deux autres lignes de code.

<Label x:Name="myLabel"> 
    <TextBlock> 
     <TextBlock.Text> 
      <MultiBinding StringFormat="{}{0} - {1}"> 
       <Binding Path="Lib1" /> 
       <Binding Path="Lib2" /> 
      </MultiBinding> 
     </TextBlock.Text> 
    </TextBlock> 
</Label> 
0
<Label> 
    <AccessText> 
     <MultiBinding StringFormat="{x:Static properties:Resources.MyText}"> 
     <Binding Path="MyObj.MyProp" Mode="OneTime"/> 
     </MultiBinding> 
    </AccessText> 
</Label> 

Resources.MyText peut contenir quelque chose comme "Fox saute par-dessus {0}."

Questions connexes