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 委托侦听对 TextBlock 上的 Tag 属性的更改。

<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 参数,因此可以使用同一回调来处理多个属性更改的情况,并且逻辑可以为每个不同属性编写事例。

出于性能原因,无法像从 DependencyPropertyChangedChangedEventArgs 那样从 PropertyChangedCallback 方法获取 OldValue / NewValue 属性对。 属性值在回调之前会更改,因此调用方法后,可以调用 DependencyObject.GetValue 来检索新值。

适用于

另请参阅