微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 为什么我不能在设计时在XAML中使用CultureInfo.CurrentCulture?

我有以下XAML:
<TextBlock Text="{Binding Source={x:Static s:DateTime.Now},StringFormat=Date: {0:dddd,MMMM dd}}"/>

s:DateTime.Now with xmlns:s =“clr-namespace:System; assembly = mscorlib”在运行时和设计模式下都能正常工作(Visual Studio 2015 Enterprise).

但是,如果我尝试使用CultureInfo.CurrentCulture,那么这只在运行时工作,并在设计模式下给我一个错误(xmlns:c =“clr-namespace:System.Globalization; assembly = mscorlib”):

<TextBlock Text="{Binding Source={x:Static s:DateTime.Now},ConverterCulture={x:Static c:CultureInfo.CurrentCulture},MMMM dd}}"/>

我不是在寻找一种解决方法.我只是想了解DateTime.Now和CultureInfo.CurrentCulture之间的区别,以及为什么其中一个工作而另一个不工作.

解决方法

我知道你没有要求解决方法,我无法回答你原来的问题.

我仍然想发布我的解决方案,以防其他人,像我一样,偶然发现你的问题寻找解决方法.

如果在CustomBinding类中设置ConverterCulture并在xaml中使用此CustomBinding而不是Binding,它也可以在设计时使用.

public class CultureAwareBinding : System.Windows.Data.Binding
{
    public CultureAwareBinding()
    {
        ConverterCulture = CultureInfo.CurrentCulture;
    }
}

你可以在你的xaml中使用它.

<TextBlock Text="{CultureAwareBinding Source={x:Static s:DateTime.Now},MMMM dd}}"/>

作为额外的好处,如果需要,您可以稍后在一个地方更改ConverterCulture.您也可以像这样设置像StringFormat这样的其他属性.

原文地址:https://www.jb51.cc/csharp/99445.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐