2012-10-03 113 views
0

我比較新手。我認爲的問題很簡單,但我找不到解決方案。點擊button1打開一個彈出窗口並添加到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); 
     } 
    } 
} 

回答

4

保存在某個地方的事件處理程序中的變量

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

canvas1.MouseDown += onMouseDown; 

,以後你可以再刪除該事件處理程序:

canvas1.MouseDown -= onMouseDown; 
+0

謝謝你,它的工作,但與MouseButtonEventHandler而不是var – butaro

+0

對不起,我也注意到了這個錯誤,並且已經糾正了它 – doerig

+0

看起來@VladimirMarinov正在嘗試在他原來的問題中這樣做,並且我現在要做:我需要從onMouseDown事件處理程序中刪除onMousedown事件處理程序!當我嘗試這樣做時,雖然intellisense說「使用未分配的局部變量onMouseDown」你是如何解決這個問題的? –

相關問題