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 クラスは、.NET Framework 4 の実装にIReceiveMarkupExtension依存しないでください。 代わりに、属性付きコールバックを使用 XamlSetMarkupExtensionAttributeします。

注意 (実装者)

カスタムまたは既存 MarkupExtension の実装で通常使用できる既定のサービス プロバイダーによって返される一般的なサービスには、次のプライマリ サービスが含まれます。

  • IProvideValueTarget マークアップ拡張が使用されているコンテキストからオブジェクト参照とプロパティ識別子を報告します

  • IXamlTypeResolver は、XAML 型名に基づいて を提供 Type できる一般的な XAML オブジェクトの書き込み動作と並行するサービスを公開します。 名前には、必要に応じて、マップされた XAML 名前空間のプレフィックスを含めることができます。

  • IXamlSchemaContextProvider は、アクティブな XAML スキーマ コンテキストを直接公開します。 報告された XamlSchemaContextから、型のサポートのためにアセンブリをマップする方法、アセンブリ内の優先プレフィックス、アセンブリ内の各 XamlType リストなどの XAML スキーマ コンテキスト情報を取得できます。

  • より特殊なマークアップ拡張シナリオで使用できるその他のサービスは次のとおりです。

の実装では、 パラメーターをProvideValue(IServiceProvider)serviceProvider無視できる可能性があります。 これは、値を返すコンテキストがまったく必要ない一部の基本的なシナリオで実行可能です。

一般的な使用方法では、.NET Framework XAML サービスと実装された XAML オブジェクト ライターは、XAML 処理中に呼び出されるすべての値コンバーター メソッドにサービス プロバイダーを提供します。 ただし、堅牢性のためには、サービス プロバイダー自体と要求されたサービスの両方に null 値のコード パスを指定する必要があります。 マークアップ拡張機能が XAML プロセッサ インフラストラクチャによって提供される一般的なサービス サポートを利用できない状況で適用される場合、Null 値が発生する可能性があります。

XAML サービス プロバイダー コンテキストから利用可能なサービスとその使用方法の詳細については、「 XAML の型コンバーターとマークアップ拡張機能」を参照してください。

有用 ProvideValue(IServiceProvider) な結果を生成するために特定のサービスを使用できるようにする必要がある実装では、そのサービスが使用できない場合は例外がスローされることが想定されます。 スローする場合の推奨される例外は です InvalidOperationException

また、値を指定するためにカスタム マークアップ拡張機能に必要な引数の 1 つが null であるか、データ型に対して無効であるか、マークアップ拡張機能で処理できる値が含まれていない場合、実装によって例外がスローされる場合もあります。 スローする場合の推奨される例外は です InvalidOperationException

適用対象

こちらもご覧ください