2013-03-20 78 views
2

我在Text属性中有一个带有MultiBinding的TextBlock,而StringFormat用于连接两个结果并添加一些内容。wpf StringFormat的问题

<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1}" > 
     <Binding Path="Version" /> 
     <Binding Path="OldVersion" StringFormat="{}'({0})'" TargetNullValue=""/> 
    </MultiBinding> 
</TextBlock.Text> 

第一个StringFormat按预期工作,但第二个不适用:它返回无括号的值。我不想在第一个StringFormat中使用括号,因为有时第二个值是Nothing。 在此先感谢。

+1

不能哟你把括号放在第一个StringFormat中? 'MultiBinding StringFormat =“{} {0}({1})”>> – 2013-03-20 17:04:25

+0

我不能说第一个,因为第二个参数有时什么也没有,我想用TargetNullValue,就像我在题。 – IFink 2013-03-21 14:07:52

回答

2

当您使用MultiBindingmsdn)时,内部StringFormat将被忽略。

当您使用MultiBinding时,StringFormat属性仅适用于在MultiBinding上设置的 。在任何子绑定对象上设置的 的StringFormat值被忽略。复合字符串格式中的参数 的数量不能超过MultiBinding中子对象的绑定数量 。

而不是MultiBinding你可以用下面的代码:

<StackPanel Orientation="Horizontal"> 
    <TextBlock Text="{Binding Version}" /> 
    <TextBlock Text="{Binding OldVersion, StringFormat=({0}), TargetNullValue=''}" /> 
</StackPanel> 

或者你可以创建包装属性OldVersion属性:

public string OldVersionEx 
{ 
    get 
    { 
     if (string.IsNullOrEmpty(OldVersion)) 
      return null; 
     else 
      return "(" + OldVersion + ")"; 
    } 
} 

在这种情况下绑定如下:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}" > 
      <Binding Path="Version" /> 
      <Binding Path="OldVersionEx"/> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 
+0

谢谢,这是非常hekpfull – IFink 2013-03-21 14:11:21