【WPF】依赖属性和行为(自定义按钮为例)

本文介绍了WPF中的依赖属性概念,依赖对象如何实时获取数据,并以自定义菜单按钮(MenuButton)为例,详细阐述了如何添加IconProperty、TextProperty和BackGroundProperty依赖属性。此外,还讲解了如何通过事件实现鼠标移上按钮变色,鼠标移开恢复原色的功能,并探讨了使用行为(System.Windows.Interactivity)来实现相同功能的方法。
摘要由CSDN通过智能技术生成

依赖属性是一种可以自己没有值,并能通过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
WPF(Windows Presentation Foundation)是微软开发的一种基于.NET Framework的图形显示子系统,用于开发用户界面和图形相关的应用程序。在WPF中,我们可以使用自定义控件和自定义属性来满足特定的需求和设计要求。 自定义控件是通过继承现有的WPF控件类来实现的。通过继承,我们可以重写控件的行为和外观,添加自定义的功能和特性。例如,我们可以创建一个名为CustomButton自定义按钮控件,添加额外的事件、样式和布局等。自定义控件使得我们能够灵活地调整和扩展现有的控件库,使应用程序的用户界面更加独特和富有创意。 自定义属性是在自定义控件中添加的自定义属性。这些属性可以满足特定的设计需求,可以通过属性设置来改变控件的行为和外观。例如,在CustomButton控件中,我们可以添加一个名为CustomColor的自定义属性,用于设置按钮的背景颜色。通过在XAML中设置CustomButton的CustomColor属性值,我们可以实现按钮背景颜色的动态修改。 对于自定义属性的实现,我们需要先在控件类中定义一个依赖属性,并为这个属性添加属性变更回调函数。这样,当属性的值发生变化时,回调函数会被触发,我们可以在回调函数中执行相应的逻辑操作。在XAML中,我们可以通过控件的标签属性来设置自定义属性的值,也可以使用数据绑定的方式将属性与其他对象关联起来。 总之,WPF自定义控件和自定义属性给我们在开发中提供了更多灵活性和定制性。我们可以根据具体的需求创建独特的控件,通过自定义属性来调整控件的行为和外观。这些功能使得我们能够更好地满足用户的需求,创建更加丰富和个性化的应用程序界面。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值