我想将我的字符串绑定格式化为Amount is X
,其中X
是绑定到标签的属性。
我见过很多例子,但以下内容不起作用:
<Label Content="{Binding Path=MaxLevelofInvestment,
StringFormat='Amount is {0}'}" />
我也试过这些组合:
StringFormat=Amount is {0}
StringFormat='Amount is {}{0}'
StringFormat='Amount is \{0\}'
我甚至尝试将绑定属性的数据类型更改为int
,string
和double
。似乎没什么用。这是一个非常常见的用例,但似乎不受支持。
答案 0 :(得分:169)
这不起作用的原因是Label.Content
属性的类型为Object
,而Binding.StringFormat
仅在绑定到String
类型的属性时使用。
发生的事情是:
Binding
正在装箱您的MaxLevelOfInvestment
值并将Label.Content
属性存储为盒装小数值。ContentPresenter
。ContentTemplate
,ContentPresenter
会查找为DataTemplate
类型定义的Decimal
。当它找不到时,它使用默认模板。ContentPresenter
使用的默认模板使用标签的ContentStringFormat
属性显示字符串。可能有两种解决方案:
以下是如何使用Label.ContentStringFormat:
<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />
以下是如何使用TextBlock:
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />
注意:为简单起见,我在上面的解释中省略了一个细节:ContentPresenter
实际上使用了自己的Template
和StringFormat
属性,但在加载过程中,它们会自动模板绑定到ContentTemplate
的{{1}}和ContentStringFormat
属性,似乎Label
实际上正在使用ContentPresenter
的属性。
答案 1 :(得分:5)
制作通用StringFormatConverter : IValueConverter
。将格式字符串传递为ConverterParameter
。
Label Content="{Binding Amount, Converter={...myConverter}, ConverterParameter='Amount is {0}'"
另外,当您需要格式字符串中的多个对象时,请设置StringFormatMultiConverter : IMultiValueConverter
,例如Completed {0} tasks out of {1}
。
答案 2 :(得分:3)
我刚检查过,由于某种原因它不能与Label一起使用,可能是因为它在内部使用了ContentPresenter作为Content属性。您可以使用TextBlock,这将起作用。如果需要继承样式,行为等,也可以将TextBlock摘录放在Label的内容中。
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is \{0\}'} />
答案 3 :(得分:1)
尝试使用转换器......
<myconverters:MyConverter x:Key="MyConverter"/>
<Label Content="{Binding Path=MaxLevelofInvestment, Converter={StaticResource MyConverter"} />
public class MyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return String.Format("Amount is {0}", value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
答案 4 :(得分:1)
也许这会有所帮助......
答案 5 :(得分:0)
你可以在下面使用这个
<Label Text="{Binding Content, StringFormat='Page Data> {0}'}" />
"Content" 是绑定变量,在单引号之间键入您的文本。 {0} 将插入内容数据的位置。