DependencyPropertyChangedCallback 委托
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示属性值更改时调用的回调,用于使用 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
保存属性以注册属性更改通知的对象实例。
要注册属性更改通知的属性的依赖属性标识符。
- 属性
示例
此示例演示如何使用 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 来检索新值。