DependencyPropertyChangedEventArgs 类

定义

为在依赖属性更改其值时调用的 PropertyChangedCallback 实现提供数据。 此外,为 Control.IsEnabledChanged 事件和使用 DependencyPropertyChangedEventHandler 委托的任何其他事件提供事件数据。

public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
继承
Object Platform::Object IInspectable DependencyPropertyChangedEventArgs
属性

示例

此示例演示使用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();
    }

注解

DependencyPropertyChangedEventArgs 为涉及依赖属性值更改的两种不同情况提供数据:

  • 由 PropertyChangedCallback 用于自定义依赖属性的情况回调信息。 这是更常见的情况。
  • 基于 DependencyPropertyChangedEventHandler 的事件事件数据。 这种情况不太常见,因为使用此委托的唯一Windows 运行时事件是 Control.IsEnabledChanged 事件。 有关如何在这种情况下使用 DependencyPropertyChangedEventArgs 事件数据的详细信息,请参阅 DependencyPropertyChangedEventHandlerControl.IsEnabledChanged

PropertyChangedCallback 实现是注册依赖属性时提供的属性元数据的可选部分。 回调由依赖属性系统在内部调用。 有关依赖属性的一般信息,请参阅 自定义依赖属性依赖属性概述

通常,使用专用或内部访问来定义 方法。 该方法必须是静态方法。 由于该方法是静态的,因此 PropertyChangedCallback 委托的 DependencyObject 参数 (d) 非常重要。 这就是标识属性正在更改的特定依赖对象实例的内容。 对于许多操作,例如更正或强制转换值,或更改另一个计算属性值以响应同一对象,你将引用此 DependencyObject。 通常需要将其强制转换为更改的属性的所有者类型。 所有者类型是在 DependencyProperty.Register 调用中按名称引用的类型;分配给属性元数据的 PropertyChangedCallback 元数据是同一调用的一部分。

请注意递归的可能性。 如果更改调用 PropertyChangedCallback 的依赖属性的值,将再次调用它。 例如,如果为 Double 某个属性创建了回调,其中回调始终将值除以 2,则将以递归方式调用该回调,并且应用将处于无限循环中。

让两个或更多个不同的依赖属性定义相互更改的回调是合法的,但同样请注意,不要创建无法使值保持稳定的意外循环依赖项。

仅当事件数据中的 OldValueNewValue 不同时,才会调用 PropertyChangedCallback

OldValueNewValue 是非类型化的,因此执行的任何比较都可能需要强制转换。 许多依赖属性值都使用值类型,这意味着你将依赖运算符或值类型的其他 API 进行比较。 该功能通常以实用工具 API 的形式在表示值的 结构上可用。 例如,使用 Thickness 值上的特定于语言的实用工具 API 可以比较 Thickness 值。

注意

如果使用 C++ 编程,则一些Windows 运行时结构不支持非数据成员,因此不支持运算符或其他实用工具。 对于这些,有一个配套 Helper 类,该类提供 C++ 代码可以使用的比较 API。 例如,使用 ColorHelper 类比较 Color 值。

对自定义事件使用 DependencyPropertyChangedEventArgs

如果自定义事件因依赖属性值更改而触发,则自定义控件实现者可能会考虑使用 DependencyPropertyChangedEventHandler 作为委托类型。 只能从 PropertyChangedCallback 的上下文中触发此类事件。 这是因为更改的值 (属性、新旧值) 应位于 DependencyPropertyChangedEventArgs 在属性系统级别为事件报告的 中。 但是,没有任何 构造函数 DependencyPropertyChangedEventArgs ,并且其任何属性都是可设置的,因此获取值的唯一 DependencyPropertyChangedEventArgs 方法是从原始 PropertyChangedCallback 参数获取该值,并在触发自定义事件时传递它。

属性

NewValue

获取报告更改后依赖属性的值。

OldValue

获取报告更改之前依赖属性的值。

Property

获取发生值更改的依赖项属性的标识符。

适用于

另请参阅