【问题标题】:WPF Binding - StringFormat - Not FormattingWPF 绑定 - StringFormat - 不格式化
【发布时间】:2011-05-28 18:31:58
【问题描述】:

我有一个工具提示,其值设置为:

Value="{Binding Path=DataItem.EquitySold, StringFormat=Reserved (Equity Share: \{0\}%)}"

工具栏显示为:

72

但我希望它是:

保留(股权份额:72%)

我的绑定有什么问题?

【问题讨论】:

  • 我完全无法理解这个 xaml 是如何编译的

标签: wpf binding


【解决方案1】:

试试

StringFormat=Reserved (Equity Share: {0:P0})

【讨论】:

  • 恐怕这并没有什么不同。
【解决方案2】:

你试过了吗:

<ToolTip>
    <TextBlock Text="{Binding Path=DataItem.EquitySold, StringFormat=Reserved (Equity Share: \{0\}%)}" />
</ToolTip>

【讨论】:

  • 为什么他不能使用 Value 属性?
  • @TomerW:米奇在他的回答中解释了原因。
【解决方案3】:

您不需要转义括号。试试这个(我喜欢把格式放在单引号里):

Value="{Binding Path=DataItem.EquitySold, StringFormat='Reserved (Equity Share: {0}%)'}"

【讨论】:

  • 恐怕这没什么区别
【解决方案4】:

我认为这是您的数据类型所支持的 - 据我所知,它作为参数传递给 IFormattable。

【讨论】:

    【解决方案5】:

    工具提示是一个内容控件,这意味着它实际上没有显示模型。这在 @deccyclone 的较早答案中得到了证明,该答案将内容设置为 TextBlock。由于 TextBox 旨在显示文本,因此 StringFormat 绑定属性按宣传的方式工作。按钮是另一个例子。 (两者都派生自 ContentControl)

    如果将工具提示的内容设置为字符串,则会显示该字符串,因为如果数据类型为字符串,则工具提示具有内置转换器。如果您想利用内置的字符串转换器,您需要使用 ContentStringFormat 属性设置格式。

    <ToolTip
         Content="{Binding Path=Value}"
         ContentStringFormat="{}{0:F2} M"
    />
    

    顺便说一句,何时使用 StringFormat 或 ContentStringFormat 的提示是控件提供的用于设置显示文本的属性。 文本属性 -> 使用 StringFormat 内容属性 -> 使用 ContentStringFormat

    【讨论】:

    • Header 属性 -> HeaderStringFormat :) 谢谢!
    • 为什么您的 ContentStringFormat 中首先列出了打开和关闭大括号?
    • @ClearCloud8 当您需要 {0} 作为第一个字符时,Binding...,StringFormat={}{0} 中需要打开和关闭大括号。 ContentStringFormat 不需要它们,但它们也可能存在。
    【解决方案6】:
    <Button.ToolTip>
     <TextBlock Text="{Binding Path=ToggleText, StringFormat={}{0} Text}"/>
    </Button.ToolTip>
    

    DataGridTemplateColumn 内的按钮

    【讨论】:

      【解决方案7】:

      对于其他人来说,这里的情况略有不同,这是通过Style设置工具提示StringFormat所需要的:

      <DataGridTextColumn Header="Amount" CanUserSort="True"
                                          Binding="{Binding Amount,Mode=OneWay}">
          <DataGridTextColumn.CellStyle>
              <Style TargetType="DataGridCell">
                  <Setter Property="ToolTip">
                      <Setter.Value>
                          <TextBlock Text="{Binding JournalEntryId, StringFormat='Reserved (Equity Share: \{0\}%)'}" />
                      </Setter.Value>
                  </Setter>
              </Style>
          </DataGridTextColumn.CellStyle>
      </DataGridTextColumn>
      

      【讨论】:

        猜你喜欢
        • 2011-08-17
        • 1970-01-01
        • 2011-03-11
        • 2017-02-16
        • 2013-03-12
        • 1970-01-01
        • 2011-03-26
        • 2011-05-02
        • 1970-01-01
        相关资源
        最近更新 更多