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

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;

        }

 

时间: 2024-10-21 14:55:56

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

[02]WPF异步响应,自定义事件、委托——多线程处理

题记 在编写有GUI的程序时,会遇到这样一种情形:用户点击了一个按钮,程序处理这个事件,然而这个处理过程耗时间较长.我们不想让软件卡在这里,而是让用户可以继续使用其他的软件功能.这种问题可以用多线程的事件响应来解决.这里,我就WPF的多线程事件响应做一个简单的归纳. 一.简单的异步的事件响应 在WPF中,针对简单的多线程处理过程,我们可以使用.NET自带的BackgroundWork完成.BackgroundWork的处理过程就是异步的,不会让用户界面停止响应. using System.Com

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

参考: DragonBones骨骼动画事件系统详解 一.在DragonBones中添加自定义事件帧 动画制作时 时间轴拉到最下面有一个事件层,添加一个事件帧 左边属性面板定义自定义事件 二.Egret中监听事件 新建一个测试用骨骼动画test //新建测试用骨骼动画 let armatureDisplay:dragonBones.EgretArmatureDisplay; let factory = dragonBones.EgretFactory.factory; factory.parseD

c++中怎么自定义事件监听(回调函数)

废话不多说,上代码: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 class A 5 { 6 private: 7 int a = 5; 8 vector<void(*)(int)> funcs; 9 public: 10 void setA(int a_); 11 void registerCallback(void(*p)(int)); 12 }; 13 14 void dis

度量快速开发平台自定义控件与自定义事件的使用方法

定义控件: '定义控件,平台支持使用net环境中自带的各种控件,使用各种属性,方法和事件 dim textBox=createObject("System.Windows.Forms.TextBox") ''设置属性及显示到容器中 textBox.Text=".net自带的控件" textBox.Dock = DockStyle.Fill 容器控件1.Controls.Add(textBox) '--------------------自定义控件完成--------

使用jQuery在javascript中自定义事件

js中的自定义事件有attachEvent,addEventListener等等好多种,往往受困于浏览器兼容,而且代码写起来也相当麻烦.jQuery为我们解决了这个问题,几行代码就可以很好的实现事件的各种传递. 例如,我要点击一个button,现在要将这个点击事件抛出来,从其他任何想要的地方去接收: 这个是button <button name="btn" onclick="clickbtn()">按钮</button> js: 1 var

javascript和jquey的自定义事件小结

“通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用对象B的某个方法,实现交互:直接方法调用本质上也是属于一种特殊的发送与接受消息,它把发送消息和接收消息合并为一个动作完成: 方法调用方和被调用方被紧密耦合在一起:因为发送消息和接收消息是在一个动作内完成,所以无法做到消息的异步发送和接收: 2)对象A生成消息->将消息通知给一个事件消息处理器(Obs

第四十四课、发送自定义事件(下)

一.自定义事件对象 1.Qt可以自定义新的事件类 (1).自定义的事件类必须继承自QEvent (2).自定义的事件类必须拥有全局唯一的Type值(event->type()可以获得事件的类型) (3).程序中必须提供处理自定义事件的方法 2.自定义事件类 (1).将QEvent作为父类继承 (2).指定全局唯一的Type值 3.Qt事件的Type值 (1).每个事件类都拥有全局唯一的Type值(类似于唯一的ID号) (2).自定义事件类的Type值也需要自定义 (3).自定义事件类使用QEve

JavaScript使用自定义事件实现简单的模块化开发

WEB前端最常见驱动方式就是事件了, 所有交互等等都是通过事件,前端的常见事件有: UI事件: 焦点事件: 鼠标事件: 滚轮事件: 文本事件: 键盘事件: 变动事件: 现在网页上有一个输入框, 如果我们要对用户输入的字符串进行过滤, 或者是截获用户的输入进行处理的话, 我们要肿么办 同学们纷纷举手说:“老师,我知道,是使用添加事件“, 老师也很欣慰地点了点头, 这群家伙真的是越来越聪明了, 老师又问了”如果要取消用户的输入怎么办了“, 坐在最前排眼睛最小的同学急忙说”ev.preventDefa

漫谈js自定义事件、DOM/伪DOM自定义事件

一.说明.引言 我JS还是比较薄弱的,本文的内容属于边学边想边折腾的碎碎念,可能没什么条理,可能有表述不准确的地方,可能内容比较拗口生僻.如果您时间紧迫,或者JS造诣已深,至此您就可以点击右侧广告(木有?则RSS或盗版)然后撤了. 事件是个大课题,真要从断奶开始讲起的话,可以写个12期的连载.关于JS事件的文章(类似DOM/BOM事件模型,IE与其他浏览器事件差异,DOM1/DOM2事件定义等)落叶般随处可见.熟豆子反复炒一点意思都没有,因此,这里谈谈自己感兴趣的自定义事件以及周边. 所谓自定义