【问题标题】:Cannot set a specific language to DatePicker无法将特定语言设置为 DatePicker
【发布时间】:2018-01-22 11:43:34
【问题描述】:

我正在尝试将CurrentCulture 设置为DatePicker 语言环境,到目前为止我所做的:

XAML 定义

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

日期选择器结构

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

问题是我遇到了这个异常:

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

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

【问题讨论】:

  • 你可以这样做
  • @Rise 我有一个多语言应用程序,所以每次应用程序启动时,都需要将 DatePicker 初始化为 xaml 中的 currentLocale

标签: c# wpf datepicker


【解决方案1】:

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

很遗憾,您无法将其设置为纯 XAML 中当前文化的语言,但您可以轻松地以编程方式执行完全相同的操作:

dp.Language = XmlLanguage.GetLanguage(System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag);

<DatePicker x:Name="dp" />

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

【讨论】:

  • 是否可以将语言绑定到属性?我试过:public string GetCurrentCulture { get { return CultureInfo.CurrentCulture.IetfLanguageTag; } } 但应用程序进入中断模式
  • 设置语言绝对没有用???我使用的是英文系统,已将 dt.Language 设置为“en-GB”,但数据仍显示美式风格。
【解决方案2】:

你可以像这样使用附加属性来改变语言

  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);
        }
    }

在xml中

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2014-12-16
    • 2023-03-13
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多