既に定義されているリソースへの参照を評価することによって、任意の XAML 属性の値を提供します。 リソースは ResourceDictionary で定義され、 StaticResource の使用は ResourceDictionary でそのリソースのキーを参照します。
XAML 属性の使用方法
<object property="{StaticResource key}" .../>
XAML 値
任期 | Description |
---|---|
キー | 要求されたリソースのキー。 このキーは、 ResourceDictionary によって最初に割り当てられます。 リソース キーには、XamlName Grammar で定義されている任意の文字列を指定できます。 |
注釈
StaticResource は、XAML リソース ディクショナリ内の他の場所で定義されている XAML 属性の値を取得するための手法です。 値は、複数のプロパティ値によって共有されることを意図しているか、XAML リソース ディクショナリが XAML パッケージ化または要素化の手法として使用されるため、リソース ディクショナリに配置される場合があります。 XAML パッケージ化手法の例として、コントロールのテーマ ディクショナリがあります。 もう 1 つの例として、リソース フォールバックに使用されるマージ されたリソース ディクショナリがあります。
StaticResource は、要求されたリソースのキーを指定する 1 つの引数を受け取ります。 リソース キーは、Windows ランタイム XAML では常に文字列です。 リソース キーの最初の指定方法の詳細については、「 x:Key 属性」を参照してください。
StaticResource がリソース ディクショナリ内の項目に解決される規則については、このトピックでは説明しません。 これは、参照とリソースの両方がテンプレートに存在するかどうか、マージされたリソース ディクショナリが使用されているかどうかなどによって異なります。 リソースを定義し、サンプル コードを含む ResourceDictionary を適切に使用する方法の詳細については、「 ResourceDictionary および XAML リソース参照」を参照してください。
大事なStaticResource は、XAML ファイル内で構文的に定義されたリソースへの前方参照を試みてはなりません。 この操作はサポートされていません。 前方参照が失敗しない場合でも、前方参照をしようとするとパフォーマンスに影響します。 最適な結果を得るには、前方参照が回避されるようにリソース ディクショナリの構成を調整します。
解決できないキーに StaticResource を指定しようとすると、実行時に XAML 解析例外がスローされます。 デザイン ツールでは、警告やエラーが表示される場合もあります。
Windows ランタイム XAML プロセッサの実装では、 StaticResource 機能のバッキング クラス表現はありません。 StaticResource は XAML でのみ使用できます。 コードで最も近いのは、Contains や TryGetValue の呼び出しなど、ResourceDictionary のコレクション API を使用することです。
{ThemeResource} マークアップ拡張機能 は、別の場所にある名前付きリソースを参照する同様のマークアップ拡張機能です。 違いは、{ThemeResource} マークアップ拡張機能には、アクティブなシステム テーマに応じて異なるリソースを返す機能があるということです。 詳細については、「 {ThemeResource} マークアップ拡張」を参照してください。
StaticResource はマークアップ拡張機能です。 マークアップ拡張は通常、リテラル値またはハンドラー名以外の属性値をエスケープする必要があり、特定の型またはプロパティに型コンバーターを配置するよりもグローバルな要件である場合に実装されます。 XAML のすべてのマークアップ拡張では、属性構文で "{" 文字と "}" 文字が使用されます。これは、マークアップ拡張機能が属性を処理する必要があることを XAML プロセッサが認識する規則です。
{StaticResource} の使用例
この例の XAML は、 XAML データ バインディングのサンプルから取得します。
<StackPanel Margin="5">
<!-- Add converter as a resource to reference it from a Binding. -->
<StackPanel.Resources>
<local:S2Formatter x:Key="GradeConverter"/>
</StackPanel.Resources>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Percent grade:" Margin="5" />
<Slider x:Name="sliderValueConverter" Minimum="1" Maximum="100" Value="70" Margin="5"/>
<TextBlock Style="{StaticResource BasicTextStyle}" Text="Letter grade:" Margin="5"/>
<TextBox x:Name="tbValueConverterDataBound"
Text="{Binding ElementName=sliderValueConverter, Path=Value, Mode=OneWay,
Converter={StaticResource GradeConverter}}" Margin="5" Width="150"/>
</StackPanel>
この特定の例では、カスタム クラスによってサポートされるオブジェクトを作成し、 ResourceDictionary のリソースとして作成します。 有効なリソースにするには、この local:S2Formatter
要素にも x:Key 属性値が必要です。 属性の値は "GradeConverter" に設定されます。
その後、リソースは XAML に少しだけ先に要求され、ここで {StaticResource GradeConverter}
表示されます。
{StaticResource} マークアップ拡張機能の使用法で別のマークアップ拡張機能 {Binding} マークアップ拡張機能のプロパティがどのように設定されているかに注意してください。そのため、ここには 2 つの入れ子になったマークアップ拡張機能の使用法があります。 まず最初に内部の1つが評価されるため、リソースを最初に取得し、値として使用できます。 この同じ例は、{Binding} マークアップ拡張にも示されています。
{StaticResource} マークアップ拡張機能のデザイン時ツールのサポート
XAML ページで {StaticResource} マークアップ拡張機能を使用する場合、Microsoft Visual Studio は Microsoft IntelliSense ドロップダウンに有効なキー値を含めることができます。 たとえば、「{StaticResource」と入力するとすぐに、現在の参照スコープのリソース キーのいずれかが IntelliSense ドロップダウンに表示されます。 ページ レベル (FrameworkElement.Resources) とアプリ レベル (Application.Resources) にある一般的なリソースに加えて、 XAML テーマ リソースと、プロジェクトで使用している拡張機能のリソースも表示されます。
{StaticResource} の使用状況の一部としてリソース キーが存在すると、定義に移動 (F12) 機能でそのリソースを解決し、定義されているディクショナリを表示できます。 テーマ リソースの場合、これはデザイン時に generic.xaml に進みます。
関連トピック
Windows developer