IQueryAmbient インターフェイス


指定されたプロパティを現在のスコープでアンビエントとして扱う必要があるかどうかを照会します。Queries for whether a specified property should be treated as ambient in the current scope.

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


アンビエントプロパティ機構の目的は、特定のオブジェクトのインスタンス化を避けるために XAML オブジェクトライターに通知することで、解析時間を短縮することです。これは、オブジェクトが一時的であり、通常の実行時には役に立たない値であることがわかっている場合に発生します。適用.The purpose of an ambient property mechanism is to improve parsing time by informing a XAML object writer to avoid instantiating certain objects, in cases where it is known that the objects are for values that are temporary and not useful for a typical run time application. 通常、プロパティ get アクセサーの XAML 参照または XAML 処理では、このようなオブジェクトをインスタンス化して、すぐに使用できる値でオブジェクトグラフの表現を設定する必要があります。Normally, XAML lookups or XAML processing of a property get accessor would need to instantiate such objects to fill the object graph representation with ready-to-use values.

IQueryAmbientに1つのIsAmbientPropertyAvailableメンバーがあります。IQueryAmbient has one member: IsAmbientPropertyAvailable.

IQueryAmbientは、に対するAmbientAttribute並列機構です。IQueryAmbient is a parallel mechanism to AmbientAttribute. IQueryAmbientは、情報を決定するためのリフレクションの使用を回避し、く (特定のオブジェクトがレポートまたはtrue falseレポートの対象IsAmbientPropertyAvailableとして選択することもあります) を処理できるようにする特殊なメカニズムですが、属性は実質的には静的です。分析)。IQueryAmbient is the specialized mechanism that avoids using reflection to determine information, and can also act situationally (a given object could choose to report true or false for IsAmbientPropertyAvailable), whereas the attribute is essentially static analysis). AmbientAttributeは、xaml オブジェクトライターが使用できる一般的なメカニズムであり、通常は専用の xaml 型システムプロパティIsAmbientIsAmbientに関連付けられています。AmbientAttribute is the general mechanism that can be used by XAML object writers and that typically correlates to the dedicated XAML type system properties IsAmbient and IsAmbient.

IQueryAmbient の WPF 実装WPF Implementations of IQueryAmbient

WPF ではIQueryAmbient 、はリソースディクショナリの参照プロセスに使用されます。In WPF, IQueryAmbient is used for the resource dictionary lookup process. 参照プロセスは、WPF Resources論理ツリー全体の連続する値を取得します。これは、キーが見つかるかキーがスコープ内に存在しないと判断されるまで、リソーススコープのルートに向かって機能します。The lookup process gets successive Resources values throughout the WPF logical tree, working towards the root of the resource scope until either a key is found or the key is determined to not exist in scope. 通常は、結果を受け取るためにResourceDictionary毎回をインスタンス化する必要があります。Normally, doing so would require instantiating a ResourceDictionary each time to receive the results. が存在する限りResourcesアンビエントとしてのResources内容を宣言すると、この参照プロセスが最適化されます。Declaring the contents of Resources as ambient so long as Resources exists optimizes this lookup process. WPF では、このインターフェイスは次のような場合に実装されます。In WPF, this interface is implemented in the following cases:

  • FrameworkElementIQueryAmbient.IsAmbientPropertyAvailable true 、のResources既存ResourceDictionaryのが含まれている場合に、すべてのプロパティ名に対してを返すようにを実装します。ただし、クエリがプロパティ自体のものではない場合に限ります。ResourcesFrameworkElement implements IQueryAmbient.IsAmbientPropertyAvailable to return true for all property names if it contains an existing ResourceDictionary for Resources, and so long as the query is not for the Resources property itself.

  • Styleは、と同じパターンResourcesを実装します。Style implements the same pattern for its Resources.

  • Applicationは、と同じパターンResourcesを実装します。Application implements the same pattern for its Resources.

  • FrameworkContentElementは、と同じパターンResourcesを実装します。FrameworkContentElement implements the same pattern for its Resources.

  • FrameworkTemplateは、と同じパターンResourcesを実装します。FrameworkTemplate implements the same pattern for its Resources. また、コンテンツTemplateをアンビエントとしてfalse報告しますTemplateが、それ自体を照会する場合はを返します。It also reports Template content as ambient but returns false if querying for Template itself.

  • これらの各ケースでは、関連Resourcesするプロパティ ( Templateおよび) はとAmbientAttributeして属性付けされます。In each of these cases, the relevant Resources property (and Template) are attributed as AmbientAttribute. 一般的な使用方法は、インターフェイスを定義するオブジェクトのAmbientAttribute属性付きプロパティではないプロパティを照会することです。The typical usage is to query for the properties that are NOT the AmbientAttribute attributed properties of the object that defines the interface. つまり、オブジェクトグラフを作成するときに、実行時間の可能性のある値を提供するためにリソースディクショナリが存在する限り、リソースディクショナリのプロパティコンテナー以外のプロパティはすべてアンビエントとして扱うことができます。In other words, so long as a resource dictionary exists in order to provide the potential run time value when the object graph is created, any other property besides the resource dictionary's property container can be treated as ambient.



指定された名前付きプロパティを現在のスコープでアンビエントと見なすことができるかどうかを照会します。Queries for whether a specified named property can be considered ambient in the current scope.