wpf自定义控件中使用自定义事件

1 创建自定义控件及自定义事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
    /// <summary>
    /// 演示用的自定义控件
    /// </summary>
    public class ExtButton : Button
    {
        public ExtButton()
        {
            base.Click += ExtButton_Click;
        }
 
        private void ExtButton_Click(object sender, RoutedEventArgs e)
        {
            //定义传递参数
            // RoutedPropertyChangedEventArgs<Object> args = new RoutedPropertyChangedEventArgs<Object>("1", "2", ControlLoadOverEvent);
            RoutedEventArgs args2 = new RoutedEventArgs(ControlLoadOverEvent, this);
            //引用自定义路由事件
            this.RaiseEvent(args2);
 
        }
        /// <summary>
        /// 声明路由事件
        /// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
        /// </summary>
        public static readonly RoutedEvent ControlLoadOverEvent = EventManager.RegisterRoutedEvent("ControlLoadOverEvent", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventArgs<Object>), typeof(ExtButton));
        /// <summary>
        /// 处理各种路由事件的方法 
        /// </summary>
        public event RoutedEventHandler ControlLoadOver
        {
            //将路由事件添加路由事件处理程序
            add { AddHandler(ControlLoadOverEvent, value); }
            //从路由事件处理程序中移除路由事件
            remove { RemoveHandler(ControlLoadOverEvent, value); }
        }
 
    }

2 使用并绑定自定义控件的事件

1
2
3
4
5
6
7
8
            <!--i为System.Windows.Interactivity引用-->
            <ext:ExtButton x:Name="extButton" Content="绑定自定义事件" HorizontalAlignment="Left" Margin="123,10,0,0" VerticalAlignment="Top" Width="95">
                <i:Interaction.Triggers>
                    <i:EventTrigger EventName="ControlLoadOver">
                        <i:InvokeCommandAction Command="{Binding ButtonLoadOverCommand}" CommandParameter="{Binding ElementName=extButton}"></i:InvokeCommandAction>
                    </i:EventTrigger>
                </i:Interaction.Triggers>
            </ext:ExtButton>

3 触发自定义事件后的操作

方式1

1
2
3
4
5
6
7
8
9
10
        public DelegateCommand<Object> ButtonLoadOverCommand { getset; }
        public void ButtonLoadOver(Object obj)
        {
            //这里的参数为自定义控件对象
            ExtButton btn = obj as ExtButton;
            if (btn != null)
            {
                var content = btn.Content;
            }
        }

方式2

1
2
3
4
5
6
7
        this.extButton.ControlLoadOver += ExtButton_ControlLoadOver;
 
        private void ExtButton_ControlLoadOver(object sender, RoutedEventArgs e)
        {
            var btn = (Button)e.Source;
            var str = btn.Content;
        }

 

wpf自定义控件中使用自定义事件的更多相关文章

  1. [WPF自定义控件]?使用WindowChrome自定义Window Style

    原文:[WPF自定义控件]?使用WindowChrome自定义Window Style 1. 为什么要自定义Window 对稍微有点规模的桌面软件来说自定义的Window几乎是标配了,一来设计师总是克 ...

  2. DragonBones龙骨骨骼中的自定义事件(另有声音、动画事件)

    参考: DragonBones骨骼动画事件系统详解 一.在DragonBones中添加自定义事件帧 动画制作时 时间轴拉到最下面有一个事件层,添加一个事件帧 左边属性面板定义自定义事件 二.Egret ...

  3. WPF程序中的弱事件模式

    在C#中,得益于强大的GC机制,使得我们开发程序变得非常简单,很多时候我们只需要管使用,而并不需要关心什么时候释放资源.但是,GC有的时并不是按照我们所期望的方式工作. 例如,我想实现一个在窗口的标题 ...

  4. Spring中实现自定义事件

    原理: 通过扩展ApplicationEvent,创建一个事件类CustomEvent.这个类必须定义一个默认的构造函数,它应该从ApplicationEvent类中继承的构造函数. 一旦定义事件类, ...

  5. vue--组件中的自定义事件

    父组件通过props向子组件传递数据,子组件通过自定义事件向父组件传递信息. 在子组件中通过$emit触发事件,父组件在直接使用子组件的地方使用v-on(即@)来监听子组件触发的事件. 举例:(不知道 ...

  6. [WPF 自定义控件]使用WindowChrome自定义RibbonWindow

    1. 为什么要自定义RibbonWindow 自定义Window有可能是设计或功能上的要求,可以是非必要的,而自定义RibbonWindow则不一样: 如果程序使用了自定义样式的Window,为了统一 ...

  7. DOM3中的自定义事件

    DOM3级还定义了自定义事件,自定义事件不是由DOM原生触发的,它的目的是让开发人员创建自己的事件.要创建的自定义事件可以由createEvent("CustomEvent"); ...

  8. JS 中的自定义事件和模拟事件

    在 JS 中模拟事件指的是模拟 JS 中定义的一些事件,例如点击事件,键盘事件等. 自定义事件指的是创建一个自定义的,JS 中之前没有的事件. 接下来分别说一下创建这两种事件的方法. 创建自定义事件 ...

  9. 【转】Flash AS3.0 中的自定义事件

    原文 http://www.cnblogs.com/acpp/archive/2010/10/19/1855670.html package { import flash.events.Event; ...

随机推荐

  1. WGCNA | weighted correlation network analysis

    早就接触过这个包了,只是一直畏惧,以为很复杂,也没有应用场景,所以认识很肤浅. 现在有应用场景了,我自己开发了一个幼稚的版本,发现了很多需求,后来想起了WGCNA似乎部分解决了我的问题,今天认真打开了 ...

  2. Hisat2 bowtie2比对结果解读(Hisat2 Alignment summary)

    RNA-seq数据的比对结果怎么解读?网上有很多人问,这里做一个大致的总结. Hisat2和bowtie2比对后产生的Alignment summary的格式是一样的,如下: Alignment su ...

  3. Linux(centos7)上安装最新版R3.4.1

    说来惭愧,居然没有在Linux安装R的经验,因为一直很少用R,用也是在win平台. 下载路径:https://cran.rstudio.com/src/base/R-3/ 强烈建议不要安装最新的R,除 ...

  4. android ------- 运行官方NDK 案例HelloJNI

    下载案例 HelloJNI ,导入工程到Eclipse,  可以直接下载我的案例, 源码下载:https://github.com/DickyQie/android-ndk 目录图 使用命令生成  . ...

  5. Fiddler抓取https数据包

    Wireshark和Fiddler的优缺点: ①Wireshark是一种在网络层上工作的抓包工具,不仅自带大量的协议分析器,而且可以通过编写Wireshark插件来识别自定义的协议.虽然Wiresha ...

  6. fiddler 显示server ip

    Fiddler显示服务器ip地址列(方便查看host是否生效) 2016年08月31日 15:40:10 阅读数:5801 1.点击菜单栏rules——customize rules... 2.ctr ...

  7. python记录_day09 初识函数

    一.认识函数 函数:对动作或者功能的封装 格式: 函数声明     def  函数名(): 函数体 函数调用     函数名() #定义函数 def xiao(): print("你的笑像一 ...

  8. apache2反向代理

    1.安装 Apache2 sudo apt-get install apache2 2.重启服务器 sudo /etc/init.d/apache2 restart 3.虚拟主机配置 启用这几个模块 ...

  9. springboot项目线程使用

    下面是一个demo: public class TestThread { private static int nThreads =Runtime.getRuntime().availableProc ...

  10. poj-1061-exgcd

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 128285   Accepted: 27962 Descript ...