DependencyPropertyChangedEventArgs 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供 PropertyChangedCallback 實作的資料,此實作會在相依性屬性變更其值時叫用。 也提供 Control.IsEnabledChanged 事件的事件資料,以及使用 DependencyPropertyChangedEventHandler 委派的任何其他事件。
public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyPropertyChangedEventArgs final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyPropertyChangedEventArgs
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
- 繼承
- 屬性
Windows 需求
裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
範例
此範例示範使用 DependencyPropertyChangedEventArgs 事件資料的 PropertyChangedCallback 實作。 特別是,它會使用NewValue來設定相關的屬性,其會在複合控制項的TextBlock部分,將基礎數值DependencyProperty值顯示為文字。
private static void ValueChangedCallback(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
NumericUpDown ctl = (NumericUpDown)obj;
Int32 newValue = (Int32)args.NewValue;
// Update the TextElement to the new value.
if (ctl.TextElement != null)
{
ctl.TextElement.Text = newValue.ToString();
}
Private Shared Sub ValueChangedCallback(ByVal obj As DependencyObject, _
ByVal args As DependencyPropertyChangedEventArgs)
Dim ctl As NumericUpDown = DirectCast(obj, NumericUpDown)
Dim newValue As Integer = args.NewValue
' Update the TextElement to the new value.
If ctl.TextElement IsNot Nothing Then
ctl.TextElement.Text = newValue.ToString()
End If
備註
DependencyPropertyChangedEventArgs 針對涉及相依性屬性值變更的兩種不同情況提供資料:
- PropertyChangedCallback針對自訂相依性屬性使用的情況回呼資訊。 這是較常見的案例。
- 以 DependencyPropertyChangedEventHandler為基礎的事件資料。 這比較不常見,因為使用此委派的唯一Windows 執行階段事件是Control.IsEnabledChanged事件。 如需如何使用 DependencyPropertyChangedEventArgs 事件資料的詳細資訊,請參閱 DependencyPropertyChangedEventHandler 或 Control.IsEnabledChanged。
PropertyChangedCallback實作是您在註冊相依性屬性時所提供的屬性中繼資料選擇性部分。 相依性屬性系統會在內部叫用回呼。 如需一般相依性屬性的詳細資訊,請參閱 自訂相依性屬性 和 相依性屬性概觀。
您通常會使用私人或內部存取來定義 方法。 方法必須為靜態。 因為方法是靜態的,所以PropertyChangedCallback委派的DependencyObject參數 (d) 很重要。 這就是識別屬性變更的特定相依性物件實例。 對於許多作業,例如更正或強制轉換值,或在相同物件上變更另一個計算屬性值,您將參考此 DependencyObject。 您通常會想要將它轉換成變更之屬性的擁有者類型。 擁有者類型是 DependencyProperty.Register 呼叫中依名稱所參考的類型; 將 PropertyChangedCallback 指派給屬性中繼資料的中繼資料是該相同呼叫的一部分。
請注意遞迴的可能性。 如果您變更 叫用 PropertyChangedCallback 的相依性屬性值,則會再次叫用它。 例如,如果您為 Double 屬性建立回呼,其中回呼一律將值除以 2,該回呼會以遞迴方式呼叫,而您的應用程式會處於無限迴圈中。
有兩個或多個不同的相依性屬性可定義彼此變更的回呼,但再次小心不要建立不小心建立不讓值穩定之非預期的迴圈相依性。
只有在事件資料中的OldValue和NewValue不同時,才會叫用PropertyChangedCallback。
OldValue 和 NewValue 不具類型,因此您執行的任何比較可能需要轉換。 許多相依性屬性值都使用實值型別,這表示您將依賴實數值型別的運算子或其他 API 來進行比較。 該功能通常可在代表值的 結構上使用,做為公用程式 API。 例如, 粗細 值上的語言特定公用程式 API 可讓您比較 [粗細 ] 值。
注意
如果您是使用 C++ 進行程式設計,其中一些Windows 執行階段結構不支援非資料成員,因此不支援運算子或其他公用程式。 針對這些,有隨附 的 Helper 類別提供 C++ 程式碼可以使用的比較 API。 例如,使用 ColorHelper 類別來比較 Color 值。
針對自訂事件使用DependencyPropertyChangedEventArgs
如果因為相依性屬性值變更而引發自訂事件,自訂控制項實作者可能會考慮使用 DependencyPropertyChangedEventHandler 做為委派類型。 您只能從 PropertyChangedCallback的內容中引發這類事件。 這是因為在屬性 (變更的值,所以舊值和新值) 應該在屬性系統層級針對附隨報告的 DependencyPropertyChangedEventArgs 中。 但沒有 DependencyPropertyChangedEventArgs 的任何建構函式,而且其屬性都無法設定,因此取得 DependencyPropertyChangedEventArgs 值的唯一方法是從原始 PropertyChangedCallback 參數取得它,並在引發自訂事件時傳遞它。
屬性
NewValue |
取得報告變更之後相依性屬性的值。 |
OldValue |
取得報告變更之前相依性屬性的值。 |
Property |
取得發生值變更之相依性屬性的識別項。 |