Как мне справиться со сменой темы? - PullRequest
1 голос
/ 23 июня 2011

У меня есть приложение Silverlight 4.0, и оно соответствует Styles.xaml для каждой темы.Я знаю, какой код написать, чтобы изменить ResourceDictionary и все.В основном мне нужна концептуальная идея от вас.У меня есть строка запроса в моем URL, как ?uid=3.Темы основаны на пользователях.Так что A может иметь тему, отличную от B. Насколько я знаю, если у вас определены неявные стили, вы можете написать код для изменения темы в любом месте вашего приложения, и он будет работать нормально.Однако, если ваш словарь ресурсов определяет явные стили, вы должны обязательно установить тему в конструкторе App.xaml.cs.Дайте мне знать, если я ошибаюсь!Теперь проблема в том, что пользователь может просматривать профиль A, а затем может переходить к B.Если это произойдет, тема не изменится, потому что конструктор App.xaml.cs запускается только один раз при запуске приложения.Как мне справиться с этим?Один из вариантов - никогда не создавать явные стили и сохранять их все неявными.Ребята, есть ли у вас другие варианты?

Второй вопрос: тема постоянно меняется по мере того, как пользователь просматривает страницу, нужно ли мне продолжать звонить через веб-службу, чтобы узнать, какая тема применима к этому конкретному пользователю?Это приведет к огромному снижению производительности, если вы сделаете дополнительный вызов веб-сервиса на каждой странице.Это приемлемо или у вас есть какой-то другой лучший вариант?

PS: Еще одно решение - я создаю базовую страницу и на этой странице сохраняю _previousUserId.Если currentUserId (извлеченный из строки запроса) не совпадает с _previousUserId, я звоню, чтобы посмотреть, какую тему этот конкретный пользователь установил для своего профиля, и после вызова веб-службы сделаю _previousUserId = currentUserId (так что следующий вызов не будетсделано, пока пользователь находится в профиле этого userId).Но есть еще одна проблема с решением: страница будет загружать все свои данные со старой темой, пока ответ от веб-службы на получение новой темы не придет.Это выглядит глючно.Например.Пользователь сначала посещает профиль А, поэтому его тема будет извлечена из веб-сервиса и применена.Затем он посещает профиль B, но тема будет оставаться тем же A, пока не вернется асинхронный вызов для получения темы B.

Как вы справляетесь со всеми этими вещами?Дайте мне знать, если мне не ясно.

Заранее спасибо:)

...