自定义 DependencyProperty 与 RoutedEvent

原文:自定义 DependencyProperty 与 RoutedEvent

    //自定义依赖属性
    class MyBook : DependencyObject//依赖属性必须派生自DependencyObject
    {
        public static readonly DependencyProperty BookNameProperty = DependencyProperty.Register("BookName", typeof(string), typeof(MyBook));//依赖属性必须是静态的DependencyObject对象
        public string BookName
        {
            get { return (string)GetValue(BookNameProperty); }
            set { SetValue(BookNameProperty, value); }
        }

        static MyBook()//静态构造函数
        {
            //BookNameProperty = DependencyProperty.Register("BookName", typeof(string), typeof(MyBook));
        }
    }
/*
 定义、注册、包装路由事件

WPF事件模型与WPF属性模型类似,与依赖项属性一样,路由事件由只读的静态字段表示,在静态构造函数中注册,并且通过一个标准的.NET事件定义进行包装*/
class MyButton : Button
    {
        //自定义路由事件
        public static readonly RoutedEvent HitEvent = EventManager.RegisterRoutedEvent("Hit", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButton));
        public event RoutedEventHandler Hit
        {
            add { AddHandler(HitEvent, value); }
            remove { RemoveHandler(HitEvent, value); }
        }

        static MyButton()
        {
            //HitEvent = EventManager.RegisterRoutedEvent("Hit", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(MyButton));
        }

        public void RaiseRoutedEvent()
        {
            RoutedEventArgs routedEventArgs = new RoutedEventArgs(MyButton.HitEvent);
            //UIElement.RaiseEvent(RoutedEventArgs routedEeventArgs)方法
            this.RaiseEvent(routedEventArgs);//触发路由事件方法
        }

        //自定义普通事件
        //public delegate void EventHandler(object sender, EventArgs e);
        public event EventHandler SelectingButton;

        protected override void OnClick()
        {
            base.OnClick();

            RaiseRoutedEvent();//调用RaiseRoutedEvent()方法引发路由事件

            if (SelectingButton != null)
                SelectingButton(this, null);//调用SelectingButton(this, null)引发普通事件
        }
    }

原文地址:https://www.cnblogs.com/lonelyxmas/p/9478979.html

时间: 2024-10-13 06:27:41

自定义 DependencyProperty 与 RoutedEvent的相关文章

Silverlight 用DependencyProperty 为 自定义控 件定义属性

为ImageButton自定义IconSource和Contents属性 xaml代码 <UserControl x:Class="SilverlightCreate.SilverlightButtons" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quo

《Programming WPF》翻译 第9章 3.自定义功能

原文:<Programming WPF>翻译 第9章 3.自定义功能 一旦你挑选好一个基类,你将要为你的控件设计一个API.大部分WPF元素提供属性暴露了多数功能,事件,命令,因为他们从框架中获取广泛的支持,以及易于使用XAML.WPF框架对routed event和命令提供了自动支持,它的依赖属性系统提供了数据半岛和动画支持.当然,你也可以写方法--对于某一种功能,方法是最好的途径.(例如,ListBox有一个ScrollIntoView方法,保证了一个特定的项目是可见的.这时从代码中能够做

WPF管理系统自定义分页控件 - WPF特工队内部资料

原文:WPF管理系统自定义分页控件 - WPF特工队内部资料 最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明细逻辑处理: 3.页码总数小于7时显示默认显示,大于7时切换复杂显示: 4.页码数.索引.总条数计算等: 先来一张效果图: 啥也不说了直接上代码 MISPager.xaml部分 <ResourceDictionary xmlns="

WPF 自定义CheckBox样式

自定义CheckBox样式,mark一下,方便以后参考复用 设计介绍: 1.一般CheckBox模板太难看了,肯定要重写其中的模板 2.模板状态为未选中状态和选中状态,设置为默认未选中就好了. 默认状态,设置边框.透明度等 选中的话,我们可以设置√和背景. <Style x:Key="CheckBoxStyle" TargetType="{x:Type CheckBox}"> <Setter Property="SnapsToDevice

DependencyProperty

学习到现在,你可能已经hold不住想搞起一个具有实际意义的Silverlight程序开发了.不过在开始之际,我们还需要掌握一些其它基础原理.本章中,我们会快速地学习一下Silverlight中的两个关键的概念:依赖属性(dependency properties)和路由事件(routed events). 这两个概念都是来自WPF.这两个概念对于大多数开发者来说绝对是个惊喜——毕竟,很少会期望用于做用户界面的技术会重组.NET对象抽象的核心部分.不过,WPF的这些变化的设计并不是为了改进.NET

WPF自定义路由事件

一 概要 本文通过实例演示WPF自定义路由事件的使用,进而探讨了路由事件与普通的CLR事件的区别(注:"普通的CLR事件"这个说法可能不太专业,但是,我暂时也找不到什么更好的称呼,就这么着吧,呵呵.)(扩展阅读:例说.NET事件的使用). 二 实例演示与说明 1 新建DetailReportEventArgs类,该类派生自RoutedEventArgs类,RoutedEventArgs类包含与路由事件相关的状态信息和事件数据.DetailReportEventArgs类中定义了属性Ev

读书笔记3:uwp布局原理与自定义布局设计

布局原理 布局的意义 布局是页面编程的第一步,是总体把握页面上UI元素的显式.由于Windows10支持不同分辨率不同设备,布局显得越来越重要,也越来越复杂..布局有着如下意义: 1)代码逻辑:良好的布局会使代码逻辑非常清晰,不好的布局方案回事页面代码逻辑混乱.好的布局方案,要给予对各种布局控件的理解,然后充分的利用他们的特性去实现布局的效果. 2)效率性能:布局不仅仅是界面UI的事情,他甚至会影响程序的运行效率.当界面要展示大量的控件时,布局的好坏就会直接影响到程序的效率.良好的布局实现逻辑会

[WP8.1UI控件编程]Windows Phone自定义布局规则

3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理,那么系统的布局面板并不一定会满足所有的你想要实现的布局规律,如果有一些特殊的布局规律,系统的布局面板是不支持,这时候就需要去自定义实现一个布局面板,在自定义的布局面板里面封装布局规律的逻辑.那么我们这一节从一个实际的需求出发,来实现一个自定义规律的布局面板.我们这一小节要实现的布局规律是把布局面板里面的子元素,按照圆形的排列规则进行排列,下面我们来看下这个例子的详细实现过程. 3.2.1 创建布局类

[UWP]xaml中自定义附加属性使用方法的注意项

---恢复内容开始--- 随笔小记,欢迎指正 在UWP平台上做WVVM的时候,想针对ListBox的SelectionChanged事件定义一个自定义的命令,于是使用自定义附加属性的方式.可是最后自定义附加属性SelectionChangedCommand写好了,却不知道怎么在XAML中使用. 我的自定义属性如下: namespace SelectionChangedCommand.Services { public static class SelectionChangedBehavior {