Подписка на туннельное событие вместо пузыря имеет некоторые довольно грязные побочные эффекты, которые я объясню позже.
Вот лучшее решение, так как оно сохраняет ваш пузырь в целости и сохранности. :)
btnNewConfig.AddHandler(MouseLeftButtonUpEvent,
new RoutedEventHandler(btnNewConfig_MouseUp),
true);
Вам придется объявить обработчик событий с помощью RoutedEventArgs вместо MouseButtonEventArgs, но вы можете просто привести его обратно к MouseButtonEventArgs внутри.
void btnNewConfig_MouseUp(object sender, RoutedEventArgs e)
{
MouseButtonEventArgs args = e as MouseButtonEventArgs;
Обратите внимание на последний аргумент в AddHandler - если его значение true, ваше событие будет запущено, даже если предыдущий обработчик установил e.Handled = true;
Теперь о PreviewMouseLeftButtonUp:
Туннельные события увольняют родителей перед детьми. Пузыряние - наоборот.
Если у вас задействовано много обработчиков событий, вам действительно следует придерживаться всех всплывающих окон или всех туннелей, иначе чем больше обработчиков событий вы добавите, тем более запутанным он становится - добавление одного нового обработчика событий может привести к повторному посещению всех остальных в приложении. < бр />
Большинство людей считают пузырчатую модель более естественной.
Вот почему принятый ответ проблематичен.