この概要では、XAML 構文ではなく、コードを使用して Windows Presentation Foundation (WPF) リソースにアクセスまたは作成する方法について説明します。 XAML 構文の観点からの一般的なリソースの使用状況とリソースの詳細については、「 XAML リソースの概要」を参照してください。
コードからリソースにアクセスする
XAML で定義されたリソースを識別するキーは、コードでリソースを要求した場合に特定のリソースを取得するためにも使用されます。 コードからリソースを取得する最も簡単な方法は、アプリケーションのフレームワーク レベルのオブジェクトから FindResource または TryFindResource メソッドを呼び出す方法です。 これらのメソッドの動作の違いは、要求されたキーが見つからない場合に何が起こるかです。
FindResource は例外を発生させます。
TryFindResource は例外を発生させませんが、 null
を返します。 各メソッドは、リソース キーを入力パラメーターとして受け取り、緩やかに型指定されたオブジェクトを返します。
通常、リソース キーは文字列ですが、 文字列以外の使用法が存在する場合があります。 コード リソース解決の参照ロジックは、動的リソース参照 XAML ケースと同じです。 リソースの検索は、呼び出し元の要素から始まり、論理ツリー内の親要素を続行します。 必要に応じて、引き続きアプリケーション リソース、テーマ、およびシステム リソースが検索されます。 リソースのコード要求では、実行時に発生したリソースへの変更が適切に考慮されます。
次のコード例は、キーでリソースを検索し、戻り値を使用してプロパティを設定する Click イベント ハンドラーを示しています。
private void myButton_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
Dim buttonControl = DirectCast(sender, Button)
buttonControl.Background = DirectCast(Me.FindResource("RainbowBrush"), Brush)
End Sub
リソース参照を割り当てる別の方法は SetResourceReference。 このメソッドは、リソースのキーと、リソース値を割り当てる要素インスタンスに存在する特定の依存関係プロパティの識別子という 2 つのパラメーターを受け取ります。 機能的には、このメソッドは同じであり、戻り値のキャストを必要としないという利点があります。
プログラムを使用してリソースにアクセスするもう 1 つの方法は、 Resources プロパティの内容にディクショナリとしてアクセスすることです。 リソース ディクショナリは、既存のコレクションに新しいリソースを追加したり、特定のキー名がコレクションで既に使用されているかどうかを確認したり、その他の操作を行うために使用されます。 WPF アプリケーションを完全にコードで記述している場合は、コレクション全体をコードで作成し、それにリソースを割り当てることもできます。 その後、コレクションを要素の Resources プロパティに割り当てることができます。 これについては、次のセクションで説明します。
特定のキーをインデックスとして使用して、特定の Resources コレクション内でインデックスを作成できます。 この方法でアクセスされるリソースは、リソース解決の通常のランタイム 規則に従っていません。 その特定のコレクションにのみアクセスしています。 リソース参照は、要求されたキーで有効なオブジェクトが見つからなかった場合、リソース スコープをルートまたはアプリケーションに走査しません。 ただし、この方法では、キーの検索範囲がより制約されるため、パフォーマンス上の利点がある場合があります。 リソース ディクショナリを直接操作する方法の詳細については、 ResourceDictionary クラスを参照してください。
コードを使用したリソースの作成
コードで WPF アプリケーション全体を作成する場合は、そのアプリケーション内のリソースをコードで作成することもできます。 これを実現するには、新しい ResourceDictionary インスタンスを作成し、 ResourceDictionary.Addの連続する呼び出しを使用してすべてのリソースをディクショナリに追加します。 次に、作成したResourceDictionaryを割り当てて、ページ スコープまたはResourcesに存在する要素にApplication.Resources プロパティを設定します。
ResourceDictionaryは、要素に追加せずにスタンドアロン オブジェクトとして保持することもできます。 ただし、これを行う場合は、汎用ディクショナリであるかのように、項目キーによってその中のリソースにアクセスする必要があります。 要素ResourceDictionaryプロパティにアタッチされていないResources
は、要素ツリーの一部として存在せず、FindResourceおよび関連するメソッドで使用できる参照シーケンスにはスコープがありません。
キーとしてのオブジェクトの使用
ほとんどのリソース使用量では、リソースのキーが文字列に設定されます。 ただし、さまざまな WPF 機能では、文字列の代わりにオブジェクト型がキーとして意図的に使用されます。 オブジェクトの種類によってリソースにキーを設定する機能は、WPF スタイルとテーマのサポートによって使用されます。 スタイルが設定されていないコントロールの既定値になるスタイルとテーマは、それぞれ適用するコントロールの Type によってキーが設定されます。
型によってキーを設定すると、各コントロール型の既定のインスタンスで動作する信頼性の高い参照メカニズムが提供されます。 派生型に既定のスタイルがない場合でも、型はリフレクションによって検出され、派生クラスのスタイル設定に使用できます。 Type を使用して、XAML で定義されているリソースの キーを指定できます。 ComponentResourceKey Markup Extension など、WPF 機能をサポートする他の非文字列キー使用法にも同様の拡張機能が存在します。
詳細については「スタイル、データテンプレート、および暗黙のキー」をご参照ください。
こちらも参照ください
.NET Desktop feedback