2011-07-22 5 views
3

WP7アプリケーションのApp.xaml.csのコンストラクタに次のコードを追加します。デフォルトの電話リソースをオーバーライドするときにNotImplementedExceptionが発生する

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

実行後、アプリケーションを開くとNotImplementedExceptionが発生します。

どうすればこのことができますか?

私が達成しようとしているのは、Facebookのような単一のテーマアプリケーションで、電話のテーマに関係なく常にホワイトテーマを持っています。

リソースのゲッターは常に機能するので、アクセスする電話リソースがコードから完全にブロックされているわけではありません。 (私は現在のテーマと電話のアクセントを判断するためにこれを使用しています)。 Application.Resourcesためセッターはこのように実装されているため

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}" 

あなたがコントロールするテンプレートを再起動している場合(たとえばボタン)、あなたが必要としますBlendを開いてコントロールのデフォルトスタイルを変更します。それはかなりよく文書化されていて、これらの同じ原則を基にしています...

+0

私はそれをprogramaticalyとしている理由は、動的に別のものに設定することです(いくつかの基準に基づいて) 。 –

+1

App.xaml.csのリソースディクショナリからオブジェクトを取得して、アプリケーションの起動時に変更することができます。私は他のところでそれを変更する場合、私は気を付けるだろう。 –

1

は基本的にあなたがNotImplementedExceptionを取得している理由は次のとおりです。

set 
{ 
    throw new NotImplementedException(); 
} 

、彼らが定義されているため、Facebookはすべて白である理由は、あります独自のカラーリソースを使用して、どこでも使用できます。私はまた、常に白いテーマのアプリを作った。ちょっと余計な努力が必要です。

+0

痛みを軽減するためにアプリを別の方法でコンパイルしているかもしれません:)しかし、すべてのコントロールにカスタムリソースを明示的に割り当てることはできません –

+0

ほとんどのコントロール他のコントロールからフォアグラウンドとバックグラウンドを継承します。それはまったく難しいことではありません。あなたはすでにExpression Blendのような優れたツールを使って行うよりも、時間をかけてSOを求めています。 –

+0

私は継承についてはわかりませんが、アドバイスをいただきありがとうございます –

関連する問題