我们正在为后台产品制作相当复杂的Silverlight 3 RIA用户界面。这部分功能是用户可以选择主题。我们使用Telerik主题,这些要求我们在App_Init时应用主题选择。Silverlight 3退出浏览器 - 重新启动“应用程序”
所以我们当然可以选择主题的UI,但是我们需要重新启动应用程序来应用主题。
显然,在浏览器中,这很容易 - 我们只需拖放到HtmlPage并注入一些JavaScript。
但是,浏览器外的应用程序呢?另一个要求是OOB检测并下载了应用程序的更新版本。
(已搜索周围这一点,没有人似乎解决了这一点)
更新1(感谢瓦莱里)
我们应用瓦列里的代码,但越来越问题。我们认为这个主题可能只能一次设定。我们有:
- 移动的XAML出到一个新的用户控件(LayoutMockup)
- 将RootVisual到网格和App_Init
加通首页网格在我们的MainPage,我们有(1类是我们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());
}
这是第一次运行,它的工作原理。 “Spring/Class1”主题已正确应用。 第二次(通过一个模拟按钮在UI上发起)的ChangeTheme()方法被调用与已知的工作主题,我们得到一个异常:
System.Exception的是由用户 代码信息未处理=” 错误HRESULT E_FAIL 已经从呼叫返回到COM 部件“堆栈跟踪: 在MS.Internal.XcpImports.CheckHResult(UInt32的 小时) 在MS.Internal.XcpImports.SetValue(INativeCoreTypeWrapper OBJ,的DependencyProperty物业, 字符串s) ...... etc ......
我们走了重新启动应用程序的路线,而不是切换主题,因为我们在某处读过这是不可能的。但我们是Silverlight的新手,很高兴能够接受教育。 :)
两种方法都会很好。
我发现这个问题很有趣,不仅是为了重新设置布局,还要在更新后重新启动或在发生致命的崩溃后恢复。这种类型的硬重启有可能吗? – 2010-02-12 20:45:37
@Lars:我不这么认为。没有人提出这个建议,我在某处读到你需要让用户重启应用程序。我想这可能是由于安全性,但它确实表现出糟糕的用户体验。 – 2010-02-13 10:52:49