次の方法で共有


IQueryAmbient インターフェイス

定義

指定されたプロパティを現在のスコープでアンビエントとして扱う必要があるかどうかを照会します。

public interface class IQueryAmbient
public interface IQueryAmbient
type IQueryAmbient = interface
Public Interface IQueryAmbient
派生

注釈

アンビエント プロパティ メカニズムの目的は、XAML オブジェクト ライターに通知して解析時間を短縮し、オブジェクトが一時的な値であり、一般的な実行時アプリケーションでは役に立たないことがわかっている場合に、特定のオブジェクトのインスタンス化を回避することです。 通常、プロパティ get アクセサーの XAML 検索または XAML 処理では、このようなオブジェクトをインスタンス化して、すぐに使用できる値でオブジェクト グラフ表現を埋める必要があります。

IQueryAmbient には 1 つのメンバーがあります: IsAmbientPropertyAvailable

IQueryAmbient は に対する AmbientAttribute並列メカニズムです。 IQueryAmbient は、リフレクションを使用して情報を特定することを回避し、状況に応じて動作できる特殊なメカニズムです (特定のオブジェクトは、レポート true または falseIsAmbientPropertyAvailable選択できます)。一方、 属性は基本的に静的分析です。 AmbientAttribute は、XAML オブジェクト ライターで使用できる一般的なメカニズムであり、通常は専用の XAML 型システム プロパティ IsAmbientIsAmbientに関連付けられます。

IQueryAmbient の WPF 実装

WPF では、 IQueryAmbient はリソース ディクショナリの参照プロセスに使用されます。 参照プロセスは、WPF 論理ツリー全体で連続する Resources 値を取得し、キーが見つかるか、キーがスコープ内に存在しないと判断されるまで、リソース スコープのルートに向かって動作します。 通常、これを行うには、結果を受け取るたびに を ResourceDictionary インスタンス化する必要があります。 が存在する限Resourcesり、 のResources内容をアンビエントとして宣言すると、この参照プロセスが最適化されます。 WPF では、このインターフェイスは次の場合に実装されます。

  • FrameworkElementは、 IQueryAmbient.IsAmbientPropertyAvailable に既存ResourceDictionaryResourcesの が含まれている場合、すべてのプロパティ名を返trueすために を実装します。クエリがプロパティ自体に対Resourcesしてでない限りです。

  • Style は、 に対して同じパターンを実装します Resources

  • Application は、 に対して同じパターンを実装します Resources

  • FrameworkContentElement は、 に対して同じパターンを実装します Resources

  • FrameworkTemplate は、 に対して同じパターンを実装します Resources。 また、コンテンツはアンビエントとして報告Templateされますが、それ自体に対Templateしてfalseクエリを実行すると が返されます。

  • これらの各ケースでは、関連 Resources するプロパティ (および Template) は として属性付け AmbientAttributeされます。 一般的な使用法は、インターフェイスを定義するオブジェクトの AmbientAttribute 属性付きプロパティではないプロパティを照会することです。 言い換えると、オブジェクト グラフの作成時に潜在的な実行時値を提供するためにリソース ディクショナリが存在する限り、リソース ディクショナリのプロパティ コンテナー以外の他のプロパティはアンビエントとして扱うことができます。

メソッド

IsAmbientPropertyAvailable(String)

指定された名前付きプロパティを現在のスコープでアンビエントと見なすことができるかどうかを照会します。

適用対象

こちらもご覧ください