DependencyPropertyChangedCallback 代理人

定義

表示屬性值變更時所叫用的回呼,針對向 RegisterPropertyChangedCallback 技術註冊的屬性變更通知。

public delegate void DependencyPropertyChangedCallback(DependencyObject ^ sender, DependencyProperty ^ dp);
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.Guid(4032150305, 8603, 23308, 128, 93, 188, 174, 218, 225, 84, 88)]
public delegate void DependencyPropertyChangedCallback(DependencyObject sender, DependencyProperty dp);
Public Delegate Sub DependencyPropertyChangedCallback(sender As DependencyObject, dp As DependencyProperty)

參數

sender
DependencyObject

保存屬性以註冊屬性變更通知的物件實例。

dp
DependencyProperty

要註冊屬性變更通知之屬性的相依性屬性識別碼。

屬性

範例

此範例示範如何使用 DependencyPropertyChangedCallback 委派來接聽TextBlockTag屬性的變更。

<TextBlock x:Name="textBlock1" Text="Hello, world"/>
long tagToken;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    long tagToken = textBlock1.RegisterPropertyChangedCallback(TextBlock.TagProperty, tbTagChangedCallback);
    base.OnNavigatedTo(e);

    textBlock1.Tag = "name";
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    textBlock1.UnregisterPropertyChangedCallback(TextBlock.TagProperty, tagToken);
    base.OnNavigatedFrom(e);
}

private void tbTagChangedCallback(DependencyObject sender, DependencyProperty dp)
{
    if (dp == TextBlock.TagProperty)
    {
       // These lines produce the same result.
       System.Diagnostics.Debug.WriteLine("The tag has been set to " + ((TextBlock)sender).Tag);
       System.Diagnostics.Debug.WriteLine("The tag has been set to " + sender.GetValue(dp));
    }
}

備註

委派的參數值是以提供給 RegisterPropertyChangedCallback 調用的參數為基礎,該調用會註冊屬性變更通知的特定屬性,以及叫用它的實例。

因為回呼具有 dp 參數,可識別哪些屬性值已變更,所以您可以使用相同的回呼來處理多個屬性變更的案例,而您的邏輯可以為每個不同的屬性寫入案例。

基於效能考慮,您不會從PropertyChangedCallback方法取得OldValue / NewValue屬性組,就像從DependencyPropertyChangedEventArgs一樣。 屬性值會在回呼之前變更,因此在叫用 方法之後,您可以呼叫 DependencyObject.GetValue 來擷取新的值。

適用於

另請參閱