我可以从页面类设置 Silverlight 应用程序的文化吗?

Posted

技术标签:

【中文标题】我可以从页面类设置 Silverlight 应用程序的文化吗?【英文标题】:Can I set the culture of a silverlight application from a page class? 【发布时间】:2011-02-02 02:14:43 【问题描述】:

在我的 SL 应用程序中,我有一个页面连接到 Web 服务以检索一些文化信息,例如日期格式。由于在 silverlight 应用程序的实例化时不知道此信息,因此我无法在公共 App() 构造函数中设置此信息。以下几行似乎不适用于页面类中服务调用的异步完成方法:

var dateFormatString = e.Result.DateFormatString;
Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString;

有没有办法从页面类中设置 silverlight 应用程序的文化?

【问题讨论】:

【参考方案1】:

在主线程中设置它(您的 asyncCompleted 可能在不同的线程上运行)。 如果您不知道该怎么做,请告诉我。 无需克隆文化。 (代码中的第 2 行)。 直接设置就好了:

var dateFormatString = e.Result.DateFormatString;
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString;

** EDIT 添加了从 UI 线程调用的示例代码。 您始终可以将状态传递给异步 wcf 调用。在这种情况下,我传递了一个调度程序。 调用回调后,使用 Dispatcher 更改 UI 线程中的 UI Culture。 我在脑海中写下了这个,但应该足以让您了解您需要做什么。

    public void SetCulture()
    
        YourWcfProxy.GetCultureInfoCompleted += GetCultureInfoCompleted;
        object state = Dispatcher; // variable just for clarity.
        YourWcfProxy.GetCultureInfoAsync(state);
    

    private void GetCultureInfoCompleted(object sender, GetCultureInfoCompletedCompletedEventArgs e)
    
        Dispatcher dispatcher = e.UserState as Dispatcher;
        dispatcher.BeginInvoke(() =>
        
            // set the ui culture here!
        
        );
    

** EDIT 2(回答问题)

如果你有一个方便的 UIElement,你可以使用它的 Disptacher 属性。 否则使用静态:

Deployment.Current.Dispatcher

【讨论】:

您知道在哪里可以找到silverlight 应用程序的调度程序对象的引用吗? 我试过了,但无法更新 silverlight 应用程序的文化。相反,我只是采取了一种不太理想的解决方法,即我确保在数据绑定之前使用检索到的日期格式将所有日期转换为字符串。

以上是关于我可以从页面类设置 Silverlight 应用程序的文化吗?的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid和Silverlight

如何从 Silverlight 应用程序中刷新浏览器页面?

silverlight 应用程序不能使用 wcf 命名空间

Silverlight 4 导航应用程序中的页面身份验证

silverlight 重定向到登录页面

Silverlight播放器:点击按钮(html / javascript)将视频设置为全屏? [关闭]