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

     

  • 相关阅读:
    【网络文摘】Androidguy:当你的才华还无法撑起你的野心时,那么应该静下心来学习
    【Android 百度地图实战】2.几种地图图层的显示
    【Android 百度地图实战】1.构建一个基础的地图页面
    【Window OS】”对于目标文件系统,文件XXXXX过大“导致无法进行文件操作的解决方法
    【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误"的解决办法
    【Javascript Demo】谷歌地图简单实现(附遮罩层和弹出层实现)
    【Javascript Demo】遮罩层和百度地图弹出层简单实现
    【Javascript Demo】遮罩层和弹出层简单实现
    【网络文摘】程序人生:我们工作到底为了什么
    Android手势密码--设置和校验
  • 原文地址:https://www.cnblogs.com/robertyao/p/7447315.html
Copyright © 2011-2022 走看看