2017-02-10 4 views
1

Я пытаюсь изучить C# и wpf. У меня есть сегмент кода, который работает в том, что он правильно показывает элементы управления. Я также пытаюсь создать обработчик кнопки мыши, и когда я его отлаживаю, обработчик никогда не вызывается. Кнопки вложены в несколько StackPanels, что не может показаться проблемой?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

Почему вы не обрабатывать Click событие кнопки?

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

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

Некоторые контроли «проглотить» определенные события, но контроль Button не вызывает каких-либо MouseButtonUp событие. Он вызывает событие Click. Click событие на самом деле является комбинацией LeftButtonDown и LeftButtonUp события:

WPF MouseLeftButtonUp Not Firing

Вы можете прочитать больше о перенаправленных событиях и как они работают в документации на MSDN: https://msdn.microsoft.com/en-us/library/ms742806%28v=vs.110%29.aspx