2011-07-22 58 views
3

我在WP7應用程序中將以下代碼添加到App.xaml.cs的構造函數中。當覆蓋默認的手機資源時出現NotImplementedException

Resources["PhoneBackgroundBrush"] = new ImageBrush 
{ 
    ImageSource = new BitmapImage(new Uri("/images/bg.png", UriKind.Relative)) 
}; 

運行後,我得到NotImplementedException一旦應用程序打開。

任何想法,我們如何做到這一點?

我試圖實現的是像Facebook這樣的單一主題應用程序,無論手機的主題如何,它總是有白色的主題。

需要注意的是,資源上的getter始終有效,因此訪問電話資源並非完全被代碼阻止。 (我正在使用它來確定手機的當前主題和口音)。

var a = Resources["PhoneBackgroundBrush"]; // this works fine 

回答

1

對於簡單的例子,當你知道如何時它並不複雜,但是你不應該重命名PhoneBackgroundBrush,而是爲你的資源創建一個新的鍵。

您需要在App.xaml中創建資源(或者您也可以在MergedDictionaries中引入其他位置,但這是更高級的)。 Test.jpg需要成爲您項目中的資源文件。

在App.xaml中:

<Application.Resources> 
    <ImageBrush x:Key="MyImageBrush" ImageSource="Test.jpg"/> 
</Application.Resources> 

在例如頁面:

Background="{StaticResource MyImageBrush}" 

如果你開始重新模板控制(比如一個按鈕),當你需要打開混合並修改控件的默認樣式。這是相當有據可查的,並建立在這些相同的原則...

+0

我這樣做的原因是爲了讓它動態設置爲不同的東西(基於一些標準) 。 –

+1

您可以隨時從App.xaml.cs中的資源字典中檢索對象,並在應用程序啓動時對其進行修改。我會留意如果在別處修改它。 –

1

基本上你得到一個NotImplementedException的原因是因爲二傳手爲Application.Resources實現這樣的:

set 
{ 
    throw new NotImplementedException(); 
} 

原因Facebook是全白,是因爲他們定義他們自己的色彩資源,並隨處使用它們。我也製作了一款總是以白色爲主題的應用程序。它只需要一點額外的努力。

+0

嗯,也許他們以不同的方式編譯他們的應用程序,以縮短痛苦:)但明確分配自定義資源到所有控件不適合我 –

+0

大多數控件從其他控件繼承前景和背景。這並不困難。你已經花更多時間在SO上進行研究了,而不是像Expression Blend這樣的好工具。 –

+0

我不知道繼承,但感謝您的建議 –