zoukankan      html  css  js  c++  java
  • 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;
            }

     

  • 相关阅读:
    Javascript对象原型prototype和继承
    Javascript(js)使用function定义构造函数
    phpExcel中文帮助手册
    php curl_init函数用法
    nginx启动,重启,关闭命令
    Nginx配置文件详细说明
    Nginx 简单的负载均衡配置示例
    MySQL数据库的同步配置
    ucenter home 视频增加缩略图
    web分词程序和算法
  • 原文地址:https://www.cnblogs.com/robertyao/p/7447315.html
Copyright © 2011-2022 走看看