无法为DatePicker设置特定语言

时间:2018-01-22 11:43:34

标签: c# wpf datepicker

我正在尝试将DatePicker区域设置为CurrentCulture,这是我到目前为止所做的:

XAML定义

xmlns:glob="clr-namespace:System.Globalization;assembly=mscorlib"

DatePicker结构

<DatePicker Language="{Binding Source={x:Static glob:CultureInfo.CurrentCulture}}"  />

问题是我得到了这个例外:

  

System.Windows.Data错误:1:无法创建默认转换器以在类型“System.Globalization.CultureInfo”和“System.Windows.Markup.XmlLanguage”之间执行“单向”转换。考虑使用Binding的Converter属性。 BindingExpression:路径=; DataItem ='CultureInfo'(HashCode = -1158415740); target元素是'DatePicker'(Name ='MatchCalendarDate'); target属性是'Language'(类型'XmlLanguage')   System.Windows.Data错误:5:BindingExpression生成的值对目标属性无效。 Value ='it-IT'BindingExpression:Path =; DataItem ='CultureInfo'(HashCode = -1158415740); target元素是'DatePicker'(Name ='MatchCalendarDate'); target属性是'Language'(类型'XmlLanguage')

请注意,我使用DatePicker控制MahApp。

2 个答案:

答案 0 :(得分:1)

您正在尝试将Language属性设置为CultureInfo对象,但这不起作用。您需要将其设置为XmlLanguage

不幸的是,您无法在纯XAML中将其设置为当前文化的语言,但您可以通过编程方式轻松完成相同的操作:

dp.Language = XmlLanguage.GetLanguage(System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag);
<DatePicker x:Name="dp" />

这肯定不会以任何方式破坏MVVM模式,因为您在完全相同的视图中设置了完全相同的属性。

答案 1 :(得分:0)

您可以使用附加属性更改此类语言

  public class AttachedProperties
    {
        public static readonly DependencyProperty SetLanguageProperty =
                DependencyProperty.RegisterAttached("SetLanguage", typeof(bool), typeof(AttachedProperties), new PropertyMetadata(false, OnSetLanguageChanged));

        private static void OnSetLanguageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            (d as DatePicker).Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
        }
        public static bool GetSetLanguage(DependencyObject obj)
        {
            return (bool)obj.GetValue(SetLanguageProperty);
        }
        public static void SetSetLanguage(DependencyObject obj, bool value)
        {
            obj.SetValue(SetLanguageProperty, value);
        }
    }

in xaml

<DatePicker local:AttachedProperties.SetLanguage="True"/>