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
可以為標記延伸提供服務的服務提供者 Helper。
傳回
要在套用延伸的屬性上設定的物件值。
備註
當 XAML 處理器處理屬於標記延伸的類型節點和成員值時,它會叫 ProvideValue 用該標記延伸的方法,並將結果寫入物件圖形或串行化數據流。 XAML 物件寫入器會透過 參數將服務內容傳遞給每個這類實作 serviceProvider
。
如需如何在自定義標記延伸中實 ProvideValue 作的詳細資訊,請參閱一節。
WPF 使用注意事項
重要
與標記集作業有特定互動的 WPF 類別不應依賴 IReceiveMarkupExtension .NET Framework 4 實作。 請改用 XamlSetMarkupExtensionAttribute-attributed 回呼。
給實施者的注意事項
默認服務提供者所傳回的常見服務,通常可供自定義或現有 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。