【问题标题】:Does StringFormat feature of WPF Xaml work on Label.Content?WPF Xaml 的 StringFormat 功能是否适用于 Label.Content?
【发布时间】:2011-06-14 13:14:29
【问题描述】:

我已通过 DataContext 将我的 Amount Label's 内容属性绑定到小数属性。我正在尝试应用 stringformat 但没有效果。 StringFormat 功能是否适用于标签控件?请告诉我此功能在哪些控件上起作用。顺便说一句,以下是我要为其应用货币格式的标签控件的代码

<Label Grid.Column="2" Content="{Binding Path=Amount, StringFormat={}{0:C}}" Height="23" HorizontalAlignment="Left" Margin="100,10,0,0" Name="tb" VerticalAlignment="Bottom" Width="120" />

【问题讨论】:

    标签: wpf xaml label string-formatting


    【解决方案1】:

    试试ContentStringFormat

    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/866f7934-8b10-4872-b306-122674fad5fa/

    <Label Content=”{Binding Amount}” ContentStringFormat=”C” /> 
    

    【讨论】:

    • ContentStringFormat 仅适用于 .NET 4.0。但这肯定比公认的答案要干净得多。
    • 为了后代:如果您以 {0} 开始 ContentStringFormat,请不要忘记将 {} 放在它前面。所以让它ContentStringFormat="{}{0} some text here"
    • 这很好用,直到您不希望字符串格式应用于 TargetNullValue,然后该格式需要与 TargetNullValue 和绑定路径处于相同的绑定中,这意味着需要 Pavlo 的答案跨度>
    【解决方案2】:

    StringFormat 适用于字符串类型的属性(当您绑定的对象被转换为字符串时,将应用字符串格式)。 Content 属性的类型为 Object。

    您可以在标签内放置一个 TextBlock 以达到预期的效果:

    <Label Grid.Column="2" Height="23" HorizontalAlignment="Left" Margin="100,10,0,0" Name="tb" VerticalAlignment="Bottom" Width="120">
       <TextBlock Text="{Binding Path=Amount, StringFormat={}{0:C}}"/>
    </Label>
    

    【讨论】:

    • 这真是一个奇怪的情况。我可以为 App.xaml 中的 dataTemplate 中定义的 GridViewColumns 和 Textblock 应用字符串格式,但是当我在 Page 中定义相同的 TextBlock 时,它不起作用?当控件绑定到 DataContext 时,StringFormatting 是否有效??
    • 好的,据我了解,必须满足两个条件才能使 StringFormat 工作:绑定的目标属性应该是字符串类型(如文本块上的“文本”属性)和源属性(“金额”)不应是字符串。另请阅读 MSDN 上的文档:msdn.microsoft.com/en-us/library/…。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多