【问题标题】:How to use stringformat in multibinding in WPF XAML如何在 WPF XAML 中的多重绑定中使用 stringformat
【发布时间】:2012-06-16 09:38:15
【问题描述】:

如您所知,StringFormat 对于 WPF 中的数据表示非常重要。我的问题是如何在 WPF 中进行多重绑定时使用 StringFormat?

如果我举一个非常简单的例子:

我们有变量,分别是 A 和 B,其值为 10.255555 和 25.6999999

我们想向他们展示10.2,25.6

如何使用多重绑定来做到这一点?通常使用 ValueConverter 是小菜一碟

我们将不胜感激有关此主题的任何帮助和想法

【问题讨论】:

    标签: wpf xaml binding wpf-controls


    【解决方案1】:

    只需在MultiBinding 上设置StringFormat 属性;为多重绑定中的每个绑定使用占位符({0}、{1}...),并在必要时包含格式说明符(例如,F1 表示具有 1 个十进制数字的十进制数)

    <TextBlock>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0:F1}{1:F1}">
                <Binding Path="A" />
                <Binding Path="B" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
    

    开头的{} 部分是格式字符串是转义序列(否则XAML 解析器会认为{ 是标记扩展的开头)

    【讨论】:

    • 好吧,谢谢您的快速回复,但如果您的答案可能,您能简要解释一下吗?
    • @ibrahimyilmaz,对不起,我认为代码是不言自明的......我添加了一个简短的解释。
    • 嗯。我一直认为&lt;MultiBinding/&gt; 需要转换器。实际上,当我尝试如上所述设置多重绑定时,我在运行时得到 "Cannot set MultiBinding because MultiValueConverter must be specified"。那么......让这个答案起作用的秘诀是什么?
    • 哦,这正是我需要的。 Bindings 中的 StringFormat 完全被忽略。我很沮丧。
    【解决方案2】:

    如果有人在寻找“时间格式”,这是 24 小时制的,这就是我写这篇文章的方式:

    <TextBlock TextAlignment="Center">
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0:HH:mm} - {1:HH:mm}">
                 <Binding Path="StartTime" />
                 <Binding Path="EndTime" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
    

    前导 0: 和 1: 是对 Bindings 的引用

    [0:hh:mm tt] 显示 AM/PM

    【讨论】:

      【解决方案3】:

      为简化起见,您可以使用两个 TextBlock/Labels 来显示值。

      如果您使用的是 .Net4,则可以在 TextBlock 的 Run Inline 元素中进行绑定

      <TextBlock>
          <Run Text="{Binding A, StringFormat={}{0:F1}}"/>
          <Run Text="{Binding B, StringFormat={}{0:F1}}"/>
      </TextBlock>
      

      【讨论】:

      • 两个Runs 之间将是一个空格。这不像上面提到的StringFormat="{}{0:F1}{1:F1}"。即使编写 &lt;Run /&gt;&lt;Run /&gt;&lt;Run /&gt; 也只会成功,直到您不会格式化 XAML(像 ReSharper 那样)并以 &lt;Run /&gt;[CRLF]&lt;Run /&gt;[CRLF]&lt;Run /&gt; 结束。
      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 2018-03-12
      相关资源
      最近更新 更多