2017-02-10 39 views
1

我正在嘗試學習c#和wpf。我有一段代碼可以正確顯示控件。我也嘗試創建一個鼠標按鈕處理程序,當我調試它時,處理程序從不會被調用。這些按鈕嵌套在幾個StackPanel中,這似乎不是問題所在?wpf設置動態按鈕的鼠標處理程序

 StackPanel tabPanel = new StackPanel(); 
     for (int i = 0; i < 20; i++) 
     { 
      StackPanel micPanel = new StackPanel(); 
      micPanel.Orientation = Orientation.Horizontal; 

      // Add the Calibration Button 
      Button micButton = new Button(); 
      micButton.Height = 25; 
      micButton.Name = string.Format("Mic{0}", i); 
      micButton.Content = string.Format("Mic{0}", ((20 * index) + i)); 
      micButton.MouseLeftButtonUp += new MouseButtonEventHandler(mic_MouseLeftButtonUp); 
      micPanel.Children.Add(micButton); 

      // Add the calibrated Value 
      Label micLabel = new Label(); 
      micLabel.Height = 25; 
      micLabel.Content = string.Format("Value: {0}", ((20 * index) + i)); 
      micPanel.Children.Add(micLabel); 

      tabPanel.Children.Add(micPanel); 
     } 
     tab.Content = tabPanel; 

處理程序是這樣的:

private void mic_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     Button but = sender as Button; 
    } 

我設置一個斷點,它永遠不會調用處理程序?

回答

0

這是典型的:使用preview事件處理程序確保它首先在樹視圖中引發。

micButton.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(mic_MouseLeftButtonUp); 
+0

這是因爲一些其他設備正在消耗點擊,它永遠不會到我的處理程序?這是我應該始終使用的東西嗎?還是僅僅因爲它所在的容器? – Sting

+1

@Sting提供在線文檔,詳細解釋了這一點。 – Clemens

0

爲什麼不處理Button的Click事件?

micButton.Click += new ClickEventHandler(mic_Click); 
... 

private void mic_Click(object sender, RoutedEventArgs e) 
{ 
    Button but = sender as Button; 
} 

某些控件做「吞」某些事件,但Button控制不會引發任何MouseButtonUp事件。它引發了一個Click事件。該Click事件實際上是LeftButtonDownLeftButtonUp事件的組合:

WPF MouseLeftButtonUp Not Firing

您可以閱讀更多有關路由事件,以及它們如何在文件中工作,在MSDN:https://msdn.microsoft.com/en-us/library/ms742806%28v=vs.110%29.aspx

相關問題