【问题标题】:Silverlight UI cultureSilverlight UI 文化
【发布时间】:2011-12-12 14:13:44
【问题描述】:

我的 silverlight 应用程序的数据网格中有一个日期列。我需要以 24 小时格式显示时间。为此,我在 Application_Startup 事件中修改了 UI 文化,如下所示:

    CultureInfo cinf = Thread.CurrentThread.CurrentUICulture.Clone() as CultureInfo;
    DateTimeFormatInfo f = cinf.DateTimeFormat.Clone() as DateTimeFormatInfo;
    System.Globalization.DateTimeFormatInfo df = new System.Globalization.DateTimeFormatInfo();
    string format = "MM/dd/yyyy HH:mm:ss";
    f.FullDateTimePattern = format;
    cinf.DateTimeFormat = f;
    Thread.CurrentThread.CurrentUICulture = cinf;

但 UI 始终会采用我在操作系统上的区域设置中指定的数据时间格式。 有什么指点吗?

【问题讨论】:

    标签: silverlight datagrid silverlight-4.0


    【解决方案1】:

    也尝试设置CurrentCulture,即:

    Thread.CurrentThread.CurrentCulture = cinf;
    

    【讨论】:

    • 是的,我已尝试设置 CurrentCulture 和 CurrentUICulture,但 UI 仍以 12 小时格式呈现。有趣的是,当我在视图模型类上设置断点时,格式显示为 24 小时格式。 !!!
    【解决方案2】:

    在绑定本身上定义所需的格式不是更好吗?类似的东西:-

    <sdk:DataGridTextColumn Header="SomeDate" Binding="{Binding SomeDate, StringFormat={}{0:MM/dd/yyyy HH:mm:ss}}" />
    

    您的代码不起作用的原因是Xaml 加载的控件使用的CultureInfo 是由加载Xaml 的控件的Language 属性定义的。我认为在这种情况下没有办法提供自定义 CultureInfo

    【讨论】:

    • 我绝对要求我返回一个 DateTime 对象,我不能使用返回字符串的绑定转换器。我对每一列都有过滤器,这取决于列的数据类型。我已经尝试过 XAML 中的“语言”属性,并且文化是根据我设置的语言反映的,但即使是该语言的设置也是从操作系统设置中获取的??......还有其他方法可以覆盖它吗? ?
    • @avinash:通常通过ICollectionView 的实现进行过滤,这将在发生任何绑定之前应用于传入的对象集。除此之外,我认为StringFormat 不适用,除非分配给的目标属性要求String(对于DataGridTextColumn,这是正确的)。也许a)你应该试一试,b)如果没有的话,包括你的xaml和代码的更多细节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2016-01-21
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多