Мы работаем над довольно сложным интерфейсом Silverlight 3 RIA для нашего бэк-офисного продукта. Часть функциональности этого заключается в том, что пользователь может выбирать темы. Мы используем темы Telerik, и нам требуется применить выбор темы во время App_Init.Silverlight 3 из браузера - перезагрузка «приложение»
Таким образом, у нас наверняка есть пользовательский интерфейс выбора для тем, но затем нам нужно перезапустить приложение для применения тем.
Очевидно, что в браузере это будет легко - мы просто перейдем к HtmlPage и добавим JavaScript.
Но как насчет приложения с браузером? Другим требованием для этого является то, что OOB обнаружил и загрузил обновленную версию приложения.
(искал вокруг этого, и никто не кажется, решить эту точку)
UPDATE 1 (Спасибо Валерии)
мы применили код Valeri, но получают проблемы. Мы считаем, что тема может быть установлена только однажды. Мы имеем:
- покрутил XAML из в новый UserControl (LayoutMockup)
- Установите RootVisual к сетке и добавил MainPage к сетке в App_Init
На нашем MainPage, мы имеем (Class1 наш imaginitively названием темы):
public MainPage()
{
InitializeComponent();
this.InitializeUI();
Class1 customTheme = new Class1();
customTheme.Source = new Uri("/Migturbo_Spring;Component/Themes/MyGeneric.xaml", UriKind.Relative);
ChangeTheme(customTheme);
}
, а также дополнительно код:
public void ChangeTheme(Theme theme)
{
StyleManager.ApplicationTheme = theme; // FAILS HERE 2ND TIME
this.LayoutRoot.Children.Clear();
this.InitializeUI();
}
private void InitializeUI()
{
this.LayoutRoot.Children.Add(new LayoutMockup());
}
При первом запуске он работает. Тема «Весна/Класс1» правильно применяется. Второй раза (инициируемый с помощью кнопки макета на UI) метод ChangeTheme() вызываются с известной рабочей темой, мы получаем исключение:
System.Exception был необработанным от пользователя кода Message =» Ошибка HRESULT E_FAIL был возвращен из вызова к "StackTrace COM- компонент:. в MS.Internal.XcpImports.CheckHResult (UInt32 ч) на MS.Internal.XcpImports.SetValue (INativeCoreTypeWrapper OBJ, DependencyProperty имущество, String s) ...... и т. д.
Мы пошли по пути перезапуска приложения, в отличие от переключения тем, потому что мы где-то читали, что это было невозможно. Но мы не знакомы с Silverlight и рады быть образованными. :)
Любой подход был бы замечательным.
Я нашел этот вопрос интересным не только с целью перепродажи макета, но и для перезагрузки после обновления или восстановления после фатального сбоя. Возможно ли подобное возобновление? –
@Lars: Я не думаю, что это так. Никто не предложил его, и я где-то читал, что вам нужно попросить пользователя перезапустить приложение. Я предполагаю, что это может быть связано с безопасностью, но это плохой UX. –