IAmbientProvider 接口

定义

返回一个服务,该服务可将有关环境属性或环境类型的信息项返回到类型转换器和标记扩展。

public interface class IAmbientProvider
public interface IAmbientProvider
type IAmbientProvider = interface
Public Interface IAmbientProvider

注解

此接口表示可帮助类型转换器和标记扩展获取 XAML 类型系统的环境属性标识符的服务, XamlMember (对象) 。 该服务还可以从类中获取环境属性值。 类型也可以是环境类型;使用该类型作为其值的任何成员都应被视为环境。

此服务通常通过调用 返回,该调用 GetService针对特定于上下文的服务提供程序进行。 服务提供程序通常可用于需要它的上下文,例如值转换器的执行代码。 有关详细信息,请参阅 适用于 XAML 的类型转换器和标记扩展 以及 可用于类型转换器和标记扩展的服务上下文

关于环境属性

环境属性是一个属性,其属性值应可用于 XAML 节点结构和基于它创建的对象图中存在的类型转换器和标记扩展用法。 这与加载路径的对象写入阶段或保存路径的序列化阶段的 XAML 处理器相关。

在加载路径情况下,环境属性值可能会影响 XAML 节点结构中其下存在的其他属性的对象图中的值。 当作为 XAML 节点流处理时,环境概念意味着环境属性值必须可用于类型转换器以及从 StartObjectEndObject的标记扩展。 同样,用于保存路径的类型转换器可以使用环境属性及其值的知识。 因此,生成的 XAML 是更好的往返表示形式。

一般情况下,对于成员,XAML 不指定对象成员的处理顺序。 但是,必须首先由 XAML 读取器处理任何环境属性值,以便其他属性中包含的类型转换器和标记扩展用法可以通过服务访问它 IAmbientProvider

DependsOn 是一个类似的概念,也会影响 XAML 节点处理顺序。 但是, DependsOn 只能用于对等成员和节点关系;它不能影响所有后代。 此外, DependsOn 直接影响对象图属性设置;而环境技术依赖于类型转换器或标记扩展。 在环境技术中,还必须有一个特定的类型转换器或标记扩展定义,用于指定应如何解释环境属性值并将其应用于对象。

WPF 用法说明

WPF 功能集中演示的环境属性方案是 Style.TargetType,它可以限定其他值所需的属性名称查找。 在本例中 Style.TargetType ,该值限定 Setter.Property 位于其下方的 XAML 节点中的值。 Setter.Property 使用 的类型转换器行为 DependencyProperty。 此行为通过从可用于类型转换器和标记扩展的服务上下文进行查询GetFirstAmbientValue来访问环境Style.TargetType值。

WPF 功能集中演示的环境类型方案是 ResourceDictionaryResourceDictionary 具有一个 MergedDictionaries 属性,该属性可以包含要合并的其他 ResourceDictionary 对象,合并方案的资源解析的预期顺序与加载类型的顺序冲突。 ResourceDictionaryAmbientAttribute应用 ,以便 XAML 处理器可以正确处理合并字典中的引用和StaticResource用法。 具体而言, StaticResource 是一个标记扩展,它调用 GetAllAmbientValues

方法

GetAllAmbientValues(IEnumerable<XamlType>, Boolean, IEnumerable<XamlType>, XamlMember[])

针对所请求的种类和属性集,返回环境属性信息项的可枚举集合。

GetAllAmbientValues(IEnumerable<XamlType>, XamlMember[])

针对所请求的属性集,返回环境属性信息项的可枚举集合。

GetAllAmbientValues(XamlType[])

针对请求的类型,返回可能的环境类型的对象实例的可枚举集合。

GetFirstAmbientValue(IEnumerable<XamlType>, XamlMember[])

从请求的属性集中返回单个环境属性信息项,具体情况视哪个属性是遇到的第一个属性而定。

GetFirstAmbientValue(XamlType[])

返回第一个匹配对象,该对象是所请求类型可能的环境类型。

适用于

另请参阅