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;
        }

 

最新文章

  1. js类型转化
  2. Unity Sprite Atlas Compression
  3. 机器学习职位 &amp; 面经
  4. thinkpad E450 fn快捷键设置
  5. Android照相机应用
  6. 无法连接到SQL Server 2008 R2
  7. Spring MVC 教程
  8. 【HDOJ】2510 符号三角形
  9. 【转】Windows 7下硬盘安装Ubuntu 14.04图文教程--不错
  10. 自定义UIViewController与xib文件关系深入分析
  11. 学习笔记:javascript内置对象:字符串对象
  12. Asp.net MVC 简单实现生成Excel并下载
  13. Mysql实现树形递归查询
  14. windows程序设计 显示一个窗口
  15. 李白打酒——C++
  16. day30(对象转json(java))
  17. 策略模式与SPI机制,到底有什么不同?
  18. Hibernate系列之基本配置
  19. spring boot 捕获filter异常 统一返回处理结果
  20. git配置教程

热门文章

  1. 基于虹软sdk,java实现人脸识别(demo)
  2. ECharts图表的小工具
  3. JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
  4. iTunes , iCloud 用吐了也没把照片给备份好
  5. 并发之ThreadLocal
  6. 怎么检测自己fastq的Phred类型 | phred33 phred64
  7. 质控工具之cutadapt的使用方法
  8. English trip EM2-PE-6B Teacher:Taylor
  9. Lowest Common Ancestor of a Binary Search Tree(Java 递归与非递归)
  10. python low版线程池