CoerceValueCallback 代理人
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供方法的範本,該方法會在相依性屬性值重新評估時或特別要求強制型轉 (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
參數
屬性所在的物件。 當叫用 (Invoke) 回呼時 (Callback),屬性系統將傳遞這個值。
- baseValue
- 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 屬性。
當您擁有此中繼資料時,您可以:
使用 的任一簽章 Register ,在新的類別上定義新的相依性屬性,並提供中繼資料做為
typeMetadata
值。當您衍生自擁有相依性屬性的類別時,覆寫中繼資料 (呼叫 OverrideMetadata(Type, PropertyMetadata) 現有相依性屬性的) 。
藉由呼叫 AddOwner(Type, PropertyMetadata) ,將現有的相依性屬性新增至新的 DependencyObject 類別,方法是使用新的中繼資料。
此回呼的實作應該檢查 中的 baseValue
值,並根據值或型別來判斷這是需要進一步強制執行的值。
CoerceValueCallback每當屬性系統或任何其他呼叫端在 實例上 DependencyObject 呼叫時,都會叫 CoerceValue 用相依性屬性的 ,並將該屬性的識別碼指定為 dp
。
屬性值的變更可能來自屬性系統中的任何可能參與者。 這包括樣式、泛型失效、觸發程式、屬性值繼承,以及本機值設定。
一般而言,您應該避免針對任何指定的相依性屬性指定一個 CoerceValueCallback 以上的屬性, (覆寫或為已經有 CoerceValueCallback) 的相依性屬性新增新的中繼資料。 只有其中一個回呼能夠採取行動。相較于呼叫端,動作回呼會套用至繼承中最衍生類別的 DependencyObject 回呼。 覆寫中繼資料時,會取代已指派給相依性屬性中繼資料的其他回呼,因為擁有者階層中存在較高的回呼。
擴充方法
GetMethodInfo(Delegate) |
取得表示特定委派所代表之方法的物件。 |