【问题标题】:wpf Problems with StringFormat字符串格式的 wpf 问题
【发布时间】:2013-03-20 16:59:48
【问题描述】:

我在 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。 提前致谢。

【问题讨论】:

  • 你不能把括号放在第一个StringFormat中吗? &lt;MultiBinding StringFormat="{}{0} ({1})" &gt;
  • 我不能说第一个,因为第二个参数有时什么都没有,而且我想使用 TargetNullValue,正如我在问题中所写的那样。

标签: wpf xaml multibinding


【解决方案1】:

当您使用MultiBinding (msdn) 时,内部StringFormat 将被忽略。

当您使用 MultiBinding 时,StringFormat 属性仅适用 当它在 MultiBinding 上设置时。 StringFormat 的值是 忽略任何子绑定对象上的设置。参数个数 在复合字符串格式中不能超过子Binding的数量 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>

【讨论】:

  • 谢谢,非常棒
猜你喜欢
  • 1970-01-01
  • 2014-10-23
  • 2023-01-12
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 2018-11-07
  • 2019-09-02
相关资源
最近更新 更多