DependencyPropertyChangedEventArgs 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
为在依赖属性更改其值时调用的 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
- 继承
- 属性
示例
此示例演示使用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事件数据的详细信息,请参阅DependencyPropertyChangedEventHandler或Control.IsEnabledChanged。
PropertyChangedCallback 实现是注册依赖属性时提供的属性元数据的可选部分。 回调由依赖属性系统在内部调用。 有关依赖属性的一般信息,请参阅 自定义依赖属性 和 依赖属性概述。
通常,使用专用或内部访问来定义 方法。 该方法必须是静态方法。 由于该方法是静态的,因此 PropertyChangedCallback 委托的 DependencyObject 参数 (d) 非常重要。 这就是标识属性正在更改的特定依赖对象实例的内容。 对于许多操作,例如更正或强制转换值,或更改另一个计算属性值以响应同一对象,你将引用此 DependencyObject。 通常需要将其强制转换为更改的属性的所有者类型。 所有者类型是在 DependencyProperty.Register 调用中按名称引用的类型;分配给属性元数据的 PropertyChangedCallback 元数据是同一调用的一部分。
请注意递归的可能性。 如果更改调用 PropertyChangedCallback 的依赖属性的值,将再次调用它。 例如,如果为 Double 某个属性创建了回调,其中回调始终将值除以 2,则将以递归方式调用该回调,并且应用将处于无限循环中。
让两个或更多个不同的依赖属性定义相互更改的回调是合法的,但同样请注意,不要创建无法使值保持稳定的意外循环依赖项。
仅当事件数据中的 OldValue 和 NewValue 不同时,才会调用 PropertyChangedCallback。
OldValue 和 NewValue 是非类型化的,因此执行的任何比较都可能需要强制转换。 许多依赖属性值都使用值类型,这意味着你将依赖运算符或值类型的其他 API 进行比较。 该功能通常以实用工具 API 的形式在表示值的 结构上可用。 例如,使用 Thickness 值上的特定于语言的实用工具 API 可以比较 Thickness 值。
注意
如果使用 C++ 编程,则一些Windows 运行时结构不支持非数据成员,因此不支持运算符或其他实用工具。 对于这些,有一个配套 Helper 类,该类提供 C++ 代码可以使用的比较 API。 例如,使用 ColorHelper 类比较 Color 值。
对自定义事件使用 DependencyPropertyChangedEventArgs
如果自定义事件因依赖属性值更改而触发,则自定义控件实现者可能会考虑使用 DependencyPropertyChangedEventHandler 作为委托类型。 只能从 PropertyChangedCallback 的上下文中触发此类事件。 这是因为更改的值 (属性、新旧值) 应位于 DependencyPropertyChangedEventArgs 在属性系统级别为事件报告的 中。 但是,没有任何 构造函数 DependencyPropertyChangedEventArgs ,并且其任何属性都是可设置的,因此获取值的唯一 DependencyPropertyChangedEventArgs 方法是从原始 PropertyChangedCallback 参数获取该值,并在触发自定义事件时传递它。
属性
| NewValue |
获取报告更改后依赖属性的值。 |
| OldValue |
获取报告更改之前依赖属性的值。 |
| Property |
获取发生值更改的依赖项属性的标识符。 |