我可以从页面类设置silverlight应用程序的区域性吗?

我可以从页面类设置silverlight应用程序的区域性吗?,silverlight,formatting,culture,Silverlight,Formatting,Culture,在我的SL应用程序中,我有一个连接到web服务的页面,用于检索一些区域性信息,例如日期格式。由于silverlight应用程序实例化时不知道此信息,因此我无法在public App()构造函数中设置此信息。在page类内服务调用的异步完成方法中,以下行似乎不起作用: var dateFormatString = e.Result.DateFormatString; Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentT

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

var dateFormatString = e.Result.DateFormatString;
Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString;
有没有办法从页面类设置silverlight应用程序的区域性?

在主线程中设置它(您的asyncCompleted可能正在另一个线程上运行)。 如果你不知道怎么做,请告诉我。 没有必要克隆文化。(代码中的第2行)。 直接设置即可:

var dateFormatString = e.Result.DateFormatString;
Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = dateFormatString;
**编辑添加的示例代码以从UI线程调用。 您始终可以将状态传递给异步wcf调用。在这种情况下,我经过一个调度员。 调用回调后,使用调度程序更改UI线程中的UI区域性。 我在脑海中写下了这些,但应该足以让你知道你需要做什么

    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!
        }
        );
    }
**编辑2(回答问题)

如果手头有UIElement,可以使用它的Dispatcher属性。 否则,请使用静态:

Deployment.Current.Dispatcher

您知道在哪里可以找到对silverlight应用程序的dispatcher对象的引用吗?我尝试了这个方法,但无法更新silverlight应用程序的区域性。相反,我只是做了一个不太理想的工作,在数据绑定之前,我确保使用检索到的日期格式将所有日期转换为字符串。