如何解决委托类型的方法绑定问题

本文关键字:类型 方法 绑定 问题 何解决 解决 | 更新日期: 2023-09-27 18:32:16

当我尝试从 Xaml 页面触发该事件时,我正在尝试创建自己的 ContextMenuOpen 事件(事件上下文菜单打开名称应与 FrameworkElement 类相同)抛出"无法绑定到目标方法,因为它的签名或安全透明度与委托类型的签名或安全透明度不兼容",但是当我在代码中挂钩事件时,它工作正常。

请找到下面的代码片段来重现问题并提供建议。

XAML

 <local:ContextMenuEvetTest  x:Name="menu"  ContextMenuOpening="menu_ContextMenuOpening" />

代码隐藏

 #region Main Class
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        //this.menu.ContextMenuOpening += menu_ContextMenuOpening;
    }
    void menu_ContextMenuOpening(object sender, ContextMenuOpeningEventArgs e)
    {
    }
} 
#endregion
#region Base Class
public class ContextMenuEvet : Control
{
    public ContextMenuEvet()
    {
    }
    public delegate void ContextMenuOpeningEventHandler(object sender, ContextMenuOpeningEventArgs e);
    public new event ContextMenuOpeningEventHandler ContextMenuOpening;
    internal void GetContextMenuOpeningEvent(ContextMenuOpeningEventArgs e)
    {
        if (ContextMenuOpening != null)
            ContextMenuOpening(this, e);
    }
} 
#endregion
#region Derived Class
public class ContextMenuEvetTest : ContextMenuEvet
{
    static ContextMenuEvetTest()
    {
    }
} 
#endregion
#region EventsArgument
public class ContextMenuOpeningEventArgs : CancelEventArgs
{
}
#endregion

提前谢谢。

杰亚斯里·

如何解决委托类型的方法绑定问题

将事件定义更改为:

public new event ContextMenuEventHandler ContextMenuOpening
        {
            add
            {
                base.AddHandler(FrameworkElement.ContextMenuOpeningEvent, value);
            }
            remove
            {
                base.RemoveHandler(FrameworkElement.ContextMenuOpeningEvent, value);
            }
        }

并删除它,

if (ContextMenuOpening != null)
            ContextMenuOpening(this, e);

和使用,

internal void GetContextMenuOpeningEvent(ContextMenuEventArgs e)
    {
        base.OnContextMenuOpening(e);
    }