我正在尝试将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。
答案 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"/>