Можно ли установить культуру приложения Silverlight из класса страниц? - PullRequest
1 голос
/ 02 февраля 2011

В моем приложении SL есть страница, которая подключается к веб-службе для получения некоторой информации о культуре, такой как форматы даты.Поскольку эта информация не известна при создании экземпляра приложения silverlight, я не могу установить ее в общедоступном конструкторе App ().Следующие строки не работают в асинхронном завершенном методе вызова службы в классе страницы:

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

Есть ли способ установить культуру приложения silverlight из класса страницы?

1 Ответ

0 голосов
/ 02 февраля 2011

Установите его в основном потоке (ваш asyncCompleted, вероятно, работает в другом потоке).Дайте мне знать, если вы не знаете, как это сделать.Нет необходимости клонировать Культуру.(строка 2 в вашем коде).Просто установите его напрямую:

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

** РЕДАКТИРОВАТЬ добавил пример кода для вызова из потока пользовательского интерфейса.Вы всегда можете передать состояние асинхронному вызову wcf.В этом случае я передаю Диспетчер.Как только обратный вызов вызван, используйте Диспетчер, чтобы изменить культуру пользовательского интерфейса в потоке пользовательского интерфейса.Я написал это на макушке, но этого должно быть достаточно, чтобы дать вам представление о том, что вам нужно делать.

    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, вы можете использовать его свойство Disptacher.В противном случае используйте статический:

Deployment.Current.Dispatcher
...