[英]WPF StringFormat on Label Content
我想将我的字符串绑定格式化为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
。 似乎没有任何效果。 这是一个非常常见的用例,但似乎不受支持。
这不起作用的原因是Label.Content
属性是Object
类型,而Binding.StringFormat
仅在绑定到String
类型的属性时使用。
正在发生的事情是:
Binding
是拳击您MaxLevelOfInvestment
值并将其存储在Label.Content
财产作为套装十进制值。ContentPresenter
的模板。ContentTemplate
, ContentPresenter
查找为Decimal
类型定义的DataTemplate
。 当它没有找到时,它使用默认模板。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
属性,但是在加载过程中,这些属性会自动绑定到Label
的ContentTemplate
和ContentStringFormat
属性,因此看起来好像ContentPresenter
实际上是在使用Label
的属性。
制作一个通用的StringFormatConverter : IValueConverter
。 将您的格式字符串作为ConverterParameter
传递。
Label Content="{Binding Amount, Converter={...myConverter}, ConverterParameter='Amount is {0}'"
此外,当您需要格式字符串中的多个对象时,请制作StringFormatMultiConverter : IMultiValueConverter
,例如, Completed {0} tasks out of {1}
。
我刚刚检查过,由于某种原因它不适用于 Label,可能是因为它在内部使用 ContentPresenter 作为 Content 属性。 您可以改用 TextBlock,这样就可以了。 如果您需要继承样式、行为等,您还可以将下面的 TextBlock 摘录放在 Label 的内容中。
<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is \{0\}'} />
尝试使用转换器....
<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;
}
}
也许这会有所帮助...
你可以在下面使用这个
<Label Text="{Binding Content, StringFormat='Page Data> {0}'}" />
“内容”是绑定变量,在单引号之间键入您的文本。 {0} 将插入内容数据的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.