IProvideValueTarget 介面

定義

表示會報告標記延伸評估的環境物件屬性關聯性的服務。

public interface class IProvideValueTarget
public interface IProvideValueTarget
type IProvideValueTarget = interface
Public Interface IProvideValueTarget

備註

IProvideValueTarget 表示服務,這個服務會報告叫用值轉換器周圍物件屬性結構的相關信息。

當 XAML 物件寫入器叫用值轉換行為時,類型轉換器和標記延伸模組可以在 XAML 物件寫入器所提供的服務內容上,查詢 IProvideValueTarget 為服務。 如需詳細資訊,請參閱 Type Converters 和 Markup Extensions for XAML 和服務內容的 Type Converters 和 Markup Extensions

特別針對標記延伸,有一個很有用的案例 IProvideValueTarget 是判斷標記延伸案例使用方式的有效性。 例如,您的標記延伸可能會實作值延遲機制,但只有在目標對象能夠在運行時間使用延遲機制的其他元件時,才適合使用該機制。 您可以檢查傳 TargetObject 回之物件的型別系統特性,並確定該物件支援延遲技術。 如果是,您的標記延伸會傳回值,如果不是,標記延伸會擲回例外狀況,而 XAML 物件寫入器會以內部例外狀況的形式加以挑選。 類似的案例是藉由檢查的 TargetProperty型別系統特性,確保特定屬性支援功能。

雖然 API 名稱IProvideValueTarget可能代表與 的MarkupExtension.ProvideValue關聯,但 所IProvideValueTarget報告的資訊對 或ValueSerializer也很有用TypeConverterTypeConverterValueSerializer 通常具有比標記延伸更多的內容,因為它們專用於特定目標類型或目標屬性,因此在類型系統中通常可預測情況有效性。 不過,還有其他案例存在。 以下是一些可能由類型轉換器或標記延伸所實作的案例清單:

  • 取得 TargetObject 以讀取該物件上其他屬性的實例值。 請注意,此處的處理可能需要針對未設定的值強固,因為目標物件上 XAML 成員的處理順序可能不具決定性。

  • 取得 TargetObject 以讀取類型層級元數據,或確認類型已實作必要的介面。

  • 取得 TargetProperty 以讀取屬性元數據。

其中一個案例是使用 IProvideValueTarget 資訊來限制標記延伸允許設定哪些物件或屬性。

嘗試使用服務之前,請確定服務本身不是 null 由您用於內容的相關服務提供者參數傳回時。

重要

使用服務時,特別重要的是不要修改 屬性所 TargetObject 參考的物件,或是該對象所參考的其他物件。 特別針對 WPF,這些變更可能會造成 WPF 屬性系統失效的非預期變更。

注意

請勿使用的型 TargetProperty 別來判斷標記延伸或型別轉換子應該傳回的精確類型。 這不是最佳做法。 您的傳回型別應該與 MarkupExtensionReturnTypeAttribute 標記延伸 () 或模式 (類型轉換子類別名稱) 一致。

在舊版的 .NET Framework 中,這個介面存在於 WPF 特定的元件 WindowsBase 中。 在 .NET Framework 4 中,IProvideValueTarget位於 System.Xaml 元件中。 如需詳細資訊,請參閱 Types Migrated from WPF to System.Xaml

WPF 使用注意事項

此服務支持架構功能,例如相依性屬性上的系結。

在 WPF 中,所 IProvideValueTarget 表示的服務可以傳回物件和屬性,以瞭解從標記延伸或類型轉換子傳回的值相依於內容的情況。

IProvideValueTarget 在的內部實 BindingBase作 中,會大量運用 類別,以實作 WPF 中相依性屬性的系結機制。

WPF 的預設內部服務提供者會實 IProvideValueTarget 作自定義標記延伸模組或類型轉換器的使用方式。 所 IProvideValueTarget 報告的物件和屬性只能由內部 WPF 服務設定。 超越此作業的定義 IProvideValueTarget ,需要定義您自己的服務提供者,以取得至少 IProvideValueTarget 實作 和 IXamlTypeResolver 服務的標記延伸和型別轉換器使用方式,而且這是此處未描述的進階案例。

TargetObject 的 Null 值TargetProperty不一定表示標記延伸或類型轉換器無法運作,不過這取決於您的實作。 即使服務的可用值是巢狀於另一個標記延伸內,例如 ,來自 的值為 IProvideValueTarget null 的範例。如果您的標記延伸是巢狀於另一個 Binding標記延伸中,例如 。 如果只基於擲回特定例外狀況的目的,依賴的實 IProvideValueTarget 作應該一律檢查 Null 值,前提是這是您預期的設計。

屬性

TargetObject

取得正在報告的目標物件。

TargetProperty

取得所要報告之目標屬性的識別項。

適用於

另請參閱