共用方式為


CoerceValueCallback 代理人

定義

提供方法的範本,該方法會在相依性屬性值重新評估時或特別要求強制型轉 (Coercion) 時被呼叫。

public delegate System::Object ^ CoerceValueCallback(DependencyObject ^ d, System::Object ^ baseValue);
public delegate object CoerceValueCallback(DependencyObject d, object baseValue);
type CoerceValueCallback = delegate of DependencyObject * obj -> obj
Public Delegate Function CoerceValueCallback(d As DependencyObject, baseValue As Object) As Object 

參數

d
DependencyObject

屬性所在的物件。 當叫用 (Invoke) 回呼時 (Callback),屬性系統將傳遞這個值。

baseValue
Object

在嘗試任何強制型轉之前,屬性的新值。

傳回值

Object

強制型轉的值 (具有適當的型別)。

範例

下列範例包含此回呼的實作,可根據其他輸入強制儲存相依性屬性的值,例如另一個屬性的值。 在此情況下,回呼會檢查屬性是否 ShirtType 對應至具有按鈕的一種恤,如果是這樣,它會建立 的起始預設色彩 ButtonColor ,如果恤類型沒有按鈕,則會將值強制 ButtonColor 回復為起始值,這會導致 UI (未顯示) 從有效選擇中移除該下拉式清單。

private static object CoerceButtonColor(DependencyObject d, object value)
{
    ShirtTypes newShirtType = (d as Shirt).ShirtType;
    if (newShirtType == ShirtTypes.Dress || newShirtType == ShirtTypes.Bowling)
    {
        return ButtonColors.Black;				
    }
    return ButtonColors.None;
}
Private Shared Function CoerceButtonColor(ByVal d As DependencyObject, ByVal value As Object) As Object
    Dim newShirtType As ShirtTypes = (TryCast(d, Shirt)).ShirtType
    If newShirtType = ShirtTypes.Dress OrElse newShirtType = ShirtTypes.Bowling Then
        Return ButtonColors.Black
    End If
    Return ButtonColors.None
End Function

備註

根據 CoerceValueCallback 的回呼可以透過數種不同的技術指派給相依性屬性。 這些技術都需要您先 (建立新的屬性中繼資料物件 PropertyMetadata ,或衍生類別,例如 FrameworkPropertyMetadata) 。 使用採用 參數的 coerceValueCallback 建構函式簽章建立中繼資料物件,並將該參數指派給回呼處理常式。 或透過任何簽章建構中繼資料,並在使用中繼資料之前設定 CoerceValueCallback 屬性。

當您擁有此中繼資料時,您可以:

此回呼的實作應該檢查 中的 baseValue 值,並根據值或型別來判斷這是需要進一步強制執行的值。

CoerceValueCallback每當屬性系統或任何其他呼叫端在 實例上 DependencyObject 呼叫時,都會叫 CoerceValue 用相依性屬性的 ,並將該屬性的識別碼指定為 dp

屬性值的變更可能來自屬性系統中的任何可能參與者。 這包括樣式、泛型失效、觸發程式、屬性值繼承,以及本機值設定。

一般而言,您應該避免針對任何指定的相依性屬性指定一個 CoerceValueCallback 以上的屬性, (覆寫或為已經有 CoerceValueCallback) 的相依性屬性新增新的中繼資料。 只有其中一個回呼能夠採取行動。相較于呼叫端,動作回呼會套用至繼承中最衍生類別的 DependencyObject 回呼。 覆寫中繼資料時,會取代已指派給相依性屬性中繼資料的其他回呼,因為擁有者階層中存在較高的回呼。

擴充方法

GetMethodInfo(Delegate)

取得表示特定委派所代表之方法的物件。

適用於

另請參閱