我們正在爲後臺產品製作相當複雜的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