2

我在 Text 属性中有一个带有 MultiBinding 的 TextBlock,还有一个 StringFormat 将两个结果连接起来并添加了一些内容。

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

第一个 StringFormat 按预期工作,但第二个未应用:它返回不带括号的值。我不想要第一个 StringFormat 中的括号,因为有时第二个值是 Nothing。提前致谢。

4

1 回答 1

2

使用( msdnStringFormat )时将忽略内部。MultiBinding

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

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>
于 2013-03-20T17:39:36.640 回答