[英]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.