• WPF 创建自定义控件及自定义事件


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

    /// <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 使用并绑定自定义控件的事件

    <!--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


    public DelegateCommand<Object> ButtonLoadOverCommand { get; set; }
    public void ButtonLoadOver(Object obj)
    {
    //这里的参数为自定义控件对象
    ExtButton btn = obj as ExtButton;
    if (btn != null)
    {
    var content = btn.Content;
    }
    }
    方式2


    this.extButton.ControlLoadOver += ExtButton_ControlLoadOver;

    private void ExtButton_ControlLoadOver(object sender, RoutedEventArgs e)
    {
    var btn = (Button)e.Source;
    var str = btn.Content;
    }

  • 相关阅读:
    docx python
    haozip 命令行解压文件
    python 升级2.7版本到3.7
    Pyautogui
    python 库搜索技巧
    sqlserver学习笔记
    vim使用
    三极管工作原理分析
    串口扩展方案+简单自制电平转换电路
    功率二极管使用注意
  • 原文地址:https://www.cnblogs.com/robertyao/p/8093527.html
Copyright © 2020-2023  润新知