依赖属性是一种可以自己没有值,并能通过Bingding从数据源获得值(依赖在别人身上)的属性。
传统的 .Net开发中,一个对象所占用的内存空间在调用 new操作符进行实例化的时候就已经决定了,而WPF允许对象在被创建的时候不包含用于存储数据的空间(即字段所占用的空间),只保留在需要用到数据时能够获得默认值、借用其他对象的数据或实时分配空间的能力——这种对象就叫做依赖对象。依赖对象实时获取数据的能力依靠依赖属性来实现。
1.自定义按钮MenuButton(图标、按钮文本、背景色)
将下载好的图片添加到项目,更改属性“复制到输出目录”为“始终复制”
2.为MenuButton添加依赖属性: IconProperty、TextProperty、BackGroundProperty
propdp+两次tab插入property DependencyProperty片段
public string Icon
{
get { return (string)GetValue(IconProperty); }
set { SetValue(IconProperty, value); }
}
//DependencyProperty实例声明特点:引用变量由public static readonly三个修饰符修饰
//实例并非由new操作符得到,而是通过DependencyProperty.Register注册
public static readonly DependencyProperty IconProperty =
DependencyProperty.Register("Icon", typeof(string), typeof(MenuButton), new PropertyMetadata(" ", new PropertyChangedCallback(IconPropertyChangedCallback)));
private static void IconPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!(d is MenuButton menuButton)) return;
if (!(e.NewValue is string newValue)) return;
//var menuButton = d as MenuButton;
//string newValue = e.NewValue.ToString();
//if (menuButton == null