C# 如何删除动态创建的事件处理程序?

C# 如何删除动态创建的事件处理程序?,c#,wpf,event-handling,C#,Wpf,Event Handling,我相对来说是个新手。我认为我的问题很简单,但我找不到解决办法。单击按钮1打开一个弹出窗口,并添加到canvas1MouseDown事件处理程序canvas1.MouseDown+=(s1,e1)=>{…}我想在用户关闭弹出窗口时删除此项。以下是全部代码: namespace MyfApplication1 { public partial class MainWindow : Window { public MainWindow() {

我相对来说是个新手。我认为我的问题很简单,但我找不到解决办法。单击按钮1打开一个弹出窗口,并添加到
canvas1
MouseDown事件处理程序
canvas1.MouseDown+=(s1,e1)=>{…}我想在用户关闭弹出窗口时删除此项。以下是全部代码:

namespace MyfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            int linesNumber = 0;

            Button button1 = new Button();
            button1.Content = "Draw";
            button1.HorizontalAlignment = HorizontalAlignment.Left;
            button1.VerticalAlignment = VerticalAlignment.Top;
            button1.Click += (s, e) =>
            {
                Popup popup = new Popup();
                popup.PlacementTarget = button1;
                popup.IsOpen = true;

                Button closePopupButton = new Button();
                closePopupButton.Content = "close";
                closePopupButton.Click += (s1, e1) =>
                {
                    popup.IsOpen = false;
                    // remove canvas1.MouseDown event handler here
                };
                popup.Child = closePopupButton;

                canvas1.MouseDown += (s1, e1) =>
                {
                    Point point = Mouse.GetPosition(canvas1);
                    Line line = new Line();
                    line.X2 = point.X; line.Y2 = point.Y;
                    line.Stroke = Brushes.Red; line.StrokeThickness = 1;
                    canvas1.Children.Add(line);
                    linesNumber++;
                };
            };
            grid1.Children.Add(button1);
        }
    }
}

将eventhandler保存在变量中的某个位置

MouseButtonEventHandler onMousedown = (o, args) => 
{ 
    ...
};

canvas1.MouseDown += onMouseDown;
稍后,您可以再次删除eventhandler:

canvas1.MouseDown -= onMouseDown;

将eventhandler保存在变量中的某个位置

MouseButtonEventHandler onMousedown = (o, args) => 
{ 
    ...
};

canvas1.MouseDown += onMouseDown;
稍后,您可以再次删除eventhandler:

canvas1.MouseDown -= onMouseDown;

谢谢,它成功了,但是使用MouseButtonEventHandler而不是varyes抱歉,我也注意到了这个错误,并且已经纠正了它看起来@VladimirMarinov在他的原始问题中试图这样做,我现在正在尝试这样做:我需要从onMousedown事件处理程序中删除onMousedown事件处理程序!当我尝试这样做时,intellisense说“使用未分配的局部变量onMouseDown”,你是如何解决这个问题的?啊!我想我已经解决了这个问题:如果您想从onMousedown内部访问onMousedown,并将其作为事件处理程序取消订阅,您只需在mousedown上声明MouseButtonEventHandler;在分配它之前,onMouseDown=(o,args)=>{//mycodehere};谢谢,它成功了,但是使用MouseButtonEventHandler而不是varyes抱歉,我也注意到了这个错误,并且已经纠正了它看起来@VladimirMarinov在他的原始问题中试图这样做,我现在正在尝试这样做:我需要从onMousedown事件处理程序中删除onMousedown事件处理程序!当我尝试这样做时,intellisense说“使用未分配的局部变量onMouseDown”,你是如何解决这个问题的?啊!我想我已经解决了这个问题:如果您想从onMousedown内部访问onMousedown,并将其作为事件处理程序取消订阅,您只需在mousedown上声明MouseButtonEventHandler;在分配它之前,onMouseDown=(o,args)=>{//mycodehere};