MarkupExtension.ProvideValue(IServiceProvider) 方法

定义

当在派生类中实现时,返回用作此标记扩展的目标属性值的对象。

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 实现的默认服务提供程序返回的常见服务包括以下主要服务。

的实现 ProvideValue(IServiceProvider) 可能会忽略 serviceProvider 参数。 这适用于某些基本方案,其中返回值根本不需要上下文。

在典型用法中,.NET Framework XAML 服务和实现的 XAML 对象编写器将为在 XAML 处理期间调用的所有值转换器方法提供服务提供程序。 但是,为了保持可靠性,应为服务提供商本身和任何请求的服务提供 null 值的代码路径。 如果在 XAML 处理器基础结构提供的典型服务支持不可用的情况下应用标记扩展,则可能会出现 Null 值。

有关 XAML 服务提供程序上下文中的可用服务及其使用方式的详细信息,请参阅 适用于 XAML 的类型转换器和标记扩展

如果某个服务不可用,则要求特定服务可用以生成有用 ProvideValue(IServiceProvider) 结果的实现应引发异常。 建议引发的异常是 InvalidOperationException

如果自定义标记扩展提供值所需的参数之一为 null、对其数据类型无效或不包含标记扩展能够处理的值,则实现还可能会引发异常。 建议引发的异常是 InvalidOperationException

适用于

另请参阅