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

前端之家收集整理的这篇文章主要介绍了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这样的其他属性.

猜你在找的C#相关文章