DependencyPropertyChangedEventArgs 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
为在依赖属性更改其值时调用的 PropertyChangedCallback 实现提供数据。 此外,为 Control.IsEnabledChanged 事件和使用 DependencyPropertyChangedEventHandler 委托的任何其他事件提供事件数据。
public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyPropertyChangedEventArgs final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyPropertyChangedEventArgs
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
- 继承
- 属性
Windows 要求
设备系列 |
Windows 10 (在 10.0.10240.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v1.0 中引入)
|
示例
此示例演示使用 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();
}
Private Shared Sub ValueChangedCallback(ByVal obj As DependencyObject, _
ByVal args As DependencyPropertyChangedEventArgs)
Dim ctl As NumericUpDown = DirectCast(obj, NumericUpDown)
Dim newValue As Integer = args.NewValue
' Update the TextElement to the new value.
If ctl.TextElement IsNot Nothing Then
ctl.TextElement.Text = newValue.ToString()
End If
注解
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 运行时结构不支持非数据成员,因此不支持运算符或其他实用工具。 对于这些,有一个配套 帮助程序 类,该类提供 C++ 代码可以使用的比较 API。 例如,使用 ColorHelper 类比较 Color 值。
对自定义事件使用 DependencyPropertyChangedEventArgs
如果自定义事件因依赖属性值更改而触发,则自定义控件实现者可能会考虑使用 DependencyPropertyChangedEventHandler 作为委托类型。 只能从 PropertyChangedCallback 的上下文中触发此类事件。 这是因为更改的值 (属性,新旧值) 应位于在属性系统级别为事件报告的 DependencyPropertyChangedEventArgs 中。 但是,DependencyPropertyChangedEventArgs 没有任何构造函数,并且其任何属性都是可设置的,因此获取 DependencyPropertyChangedEventArgs 值的唯一方法是从原始 PropertyChangedCallback 参数获取它,并在触发自定义事件时传递它。
属性
NewValue |
获取报告更改后依赖属性的值。 |
OldValue |
获取报告更改之前依赖属性的值。 |
Property |
获取发生值更改的依赖项属性的标识符。 |