摘要:附加依赖属性是 WPF 中一种特殊类型的依赖属性,它允许一个类为其他类定义属性,这些属性可以被"附加"到其他对象上使用。
什么是附加依赖属性
附加依赖属性是 WPF 中一种特殊类型的依赖属性,它允许一个类为其他类定义属性,这些属性可以被"附加"到其他对象上使用。
基本概念
附加依赖属性与常规依赖属性的主要区别在于:
常规依赖属性是在定义它的类上使用
附加依赖属性可以被其他类使用
为什么需要附加依赖属性
附加依赖属性主要用于以下场景:
当某个类需要为其他类提供属性时
当多个不相关的类需要共享相同的属性时
在布局系统中特别有用(如 Grid.Row、Canvas.Left 等)
如何定义附加依赖属性
定义附加依赖属性的语法与常规依赖属性类似,但使用RegisterAttachedpublic static class MyAttachedProperties{ public static readonly DependencyProperty IsHighlightedProperty = DependencyProperty.RegisterAttached( "IsHighlighted", typeof(bool), typeof(MyAttachedProperties), new PropertyMetadata(false, OnIsHighlightedChanged)); // Getter public static bool GetIsHighlighted(DependencyObject obj) { return (bool)obj.GetValue(IsHighlightedProperty); } // Setter public static void SetIsHighlighted(DependencyObject obj, bool value) { obj.SetValue(IsHighlightedProperty, value); } private static void OnIsHighlightedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { // 属性值变化时的处理逻辑 }}在 XAML 中使用:
在代码中使用:
MyAttachedProperties.SetIsHighlighted(button, true);bool isHighlighted = MyAttachedProperties.GetIsHighlighted(button);WPF常见的附加属性例子
布局相关:Grid.RowGrid.ColumnCanvas.LeftCanvas.TopDockPanel.Dock输入相关:FocusManager.IsFocusScope
KeyboardNavigation.TabNavigation
注意
local这个指的是我们当前自定义的附加属性的命名空间在XAML简写
来源:opendotnet