2011-08-07 10 views
2

このSilverlightアプリケーションでは、MainPageクラスのApplication.Resourcesからリソースにアクセスしようとしています。リソースには、x:Name属性ではなくx:Name属性があります。私は私のgrid1.Backgroundに名前付きリソースを割り当てるためにしようとした使用このロジックを使用してコードビハインドのApplication.Resourcesから名前付きリソースにアクセスする方法?

grid1.Background = (LinearGradientBrush)Application.Current.Resources["KeyedTwoColorGradient"]; 

は、私は次のコード行を使用してApplication.Resourcesから鍵付きのリソースを割り当てることができることを知っています: は 'System.Windows.Media.LinearGradientBrush'

に型 'System.Windows.Application' を変換できません:

grid1.Background = ((LinearGradientBrush)Application.Current).Resources.NamedTwoColorGradient; 

このコード行は私にエラーを与えます

私は別の行も試しましたが、何も効果がありませんでした。私はどこかから答えを見つけることができませんでしたので、私はこの質問でここにいます。

さらに、Namedリソースを使用するのが適切なときと、Keyedを使用する方が良いときは誰かが教えてくれますか?あなたのブラケットがあなたの例では間違った場所にあった(あなたが実際にLinearBrushにアプリケーションオブジェクトをキャストした)手始めに

答えて

2

例:

((LinearGradientBrush)Application.Current) 

が、「正しい」構文オートコンプリートされますが、ますないコンパイル:

(Application.Current as App).KeyedTwoColorGradient; 

問題は、ユーザーコントロールとは異なり、そのように命名メンバーはインテリセンス府にのみ表示されApp.xamlの等価何designer.csがないことです実際にはコードビハインドプロパティはありません。

リソースにのみキーを使用する必要があります。

+0

が表示されます。ありがとうございました。私はまだC#で​​新しく、Silverlightではもっと新しくなっていますが、この投稿は私を大いに助けました。私はリソースの命名を避け、キーイングを好むべきであることを既に理解していました。 – Gasoline

+0

+1構文は "自動補完"さえしませんが、App.g.i.csファイルに 'KeyedTwoColorGradient'フィールドが自動生成されていれば自動完了します。ただし、 "App.xaml"のビルドアクションが "ApplicationDefinition"であり、名前付き要素のフィールドを作成しないため、これは発生しません。 – AnthonyWJones

+0

@AnthonyWJones:明らかにintellisenseはXamlを単独で機能させることができますが、自動補完機能はありますが、私はReSharperをサポートしています:) –

関連する問題