gpt4 book ai didi

标签内容上的 WPF StringFormat

转载 作者:行者123 更新时间:2023-12-03 05:23:19 24 4
gpt4 key购买 nike

我想将字符串绑定(bind)格式设置为 Amount is X,其中 X 是绑定(bind)到标签的属性。

我见过很多例子,但以下不起作用:

<Label Content="{Binding Path=MaxLevelofInvestment, 
StringFormat='Amount is {0}'}" />

我也尝试过这些组合:

StringFormat=Amount is {0}
StringFormat='Amount is {}{0}'
StringFormat='Amount is \{0\}'

我什至尝试将绑定(bind)属性的数据类型更改为intstringdouble。似乎什么都不起作用。这是一个非常常见的用例,但似乎不受支持。

最佳答案

这不起作用的原因是 Label.Content 属性的类型为 Object,并且仅使用 Binding.StringFormat绑定(bind)到 String 类型的属性时。

发生的事情是:

  1. Binding 正在对您的 MaxLevelOfInvestment 值进行装箱,并将其作为装箱的十进制值存储在 Label.Content 属性中。
  2. Label 控件有一个包含 ContentPresenter 的模板。
  3. 由于未设置 ContentTemplateContentPresenter 会查找为 Decimal 类型定义的 DataTemplate。当它找不到时,它会使用默认模板。
  4. ContentPresenter 使用的默认模板通过使用标签的 ContentStringFormat 属性来呈现字符串。

有两种可能的解决方案:

  • 使用 Label.ContentStringFormat 而不是 Binding.StringFormat,或者
  • 使用 TextBlock.Text 等字符串属性代替 Label.Content

以下是如何使用 Label.ContentStringFormat:

<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />

以下是如何使用 TextBlock:

<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />

注意:为了简单起见,我在上面的解释中省略了一个细节:ContentPresenter 实际上使用了它自己的 TemplateStringFormat 属性,但是在加载这些内容会自动模板绑定(bind)到 LabelContentTemplateContentStringFormat 属性,因此看起来好像 ContentPresenter code> 实际上使用的是 Label 的属性。

关于标签内容上的 WPF StringFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206612/

24 4 0