MarkupExtension.ProvideValue(IServiceProvider) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
当在派生类中实现时,返回用作此标记扩展的目标属性值的对象。
public:
abstract System::Object ^ ProvideValue(IServiceProvider ^ serviceProvider);
public abstract object ProvideValue (IServiceProvider serviceProvider);
abstract member ProvideValue : IServiceProvider -> obj
Public MustOverride Function ProvideValue (serviceProvider As IServiceProvider) As Object
参数
- serviceProvider
- IServiceProvider
可为标记扩展提供服务的服务提供程序帮助程序。
返回
要在应用了扩展的属性上设置的对象值。
注解
当 XAML 处理器处理作为标记扩展的类型节点和成员值时,它会调用 ProvideValue 该标记扩展的 方法并将结果写入对象图或序列化流。 XAML 对象编写器通过 serviceProvider
参数将服务上下文传递给每个此类实现。
有关如何在自定义标记扩展中实现 ProvideValue 的详细信息,请参阅“实现者说明”部分。
WPF 用法说明
重要
与标记集操作具有特定交互的 WPF 类不应依赖IReceiveMarkupExtension.NET Framework 4 实现。 请改用 XamlSetMarkupExtensionAttribute特性化回调。
实施者说明
通常可用于自定义或现有 MarkupExtension 实现的默认服务提供程序返回的常见服务包括以下主要服务。
IProvideValueTarget 报告使用标记扩展的上下文中的对象引用和属性标识符
IXamlTypeResolver 公开一个服务,该服务与常规 XAML 对象编写行为并行,该行为可以基于 XAML 类型名称提供 Type 。 该名称可以选择包含映射的 XAML 命名空间的前缀。
IXamlSchemaContextProvider 直接公开活动 XAML 架构上下文。 从报告的 XamlSchemaContext中,可以获取 XAML 架构上下文信息,例如如何映射程序集以支持类型、程序集中的首选前缀、程序集中每个 XamlType 程序集的列表等。
可用于更专用化标记扩展方案的其他服务包括:
的实现 ProvideValue(IServiceProvider) 可能会忽略 serviceProvider
参数。 这适用于某些基本方案,其中返回值根本不需要上下文。
在典型用法中,.NET Framework XAML 服务和实现的 XAML 对象编写器将为在 XAML 处理期间调用的所有值转换器方法提供服务提供程序。 但是,为了保持可靠性,应为服务提供商本身和任何请求的服务提供 null 值的代码路径。 如果在 XAML 处理器基础结构提供的典型服务支持不可用的情况下应用标记扩展,则可能会出现 Null 值。
有关 XAML 服务提供程序上下文中的可用服务及其使用方式的详细信息,请参阅 适用于 XAML 的类型转换器和标记扩展。
如果某个服务不可用,则要求特定服务可用以生成有用 ProvideValue(IServiceProvider) 结果的实现应引发异常。 建议引发的异常是 InvalidOperationException。
如果自定义标记扩展提供值所需的参数之一为 null、对其数据类型无效或不包含标记扩展能够处理的值,则实现还可能会引发异常。 建议引发的异常是 InvalidOperationException。