В WPF есть ли способ определить, захватывает ли мышь другой элемент управления?

#c# #wpf

#c# #wpf

Вопрос:

В моем приложении есть элемент управления, которому необходимо знать, когда любой другой элемент управления в визуальном дереве захватывает мышь.

Возможно ли это?

Ответ №1:

Используйте мышь.Прикрепленное событие GotMouseCapture.

 public partial class MainWindow : Window {
    public MainWindow() {
        InitializeComponent();
    }
    static MainWindow() {
        EventManager.RegisterClassHandler(typeof(UIElement), Mouse.GotMouseCaptureEvent, new MouseEventHandler(MainWindow_GotMouseCapture));
    }
    static void MainWindow_GotMouseCapture(object sender, MouseEventArgs e) {
        // e.OriginalSource is a captured element
    }
}
  

Обратите внимание, что захваченный элемент доступен через мышь.Захваченное статическое свойство.

Комментарии:

1. Большое спасибо за ваш ответ. Хотя я пока не уверен, смогу ли я это использовать. Элемент управления, который хочет знать, захвачена ли мышь, находится глубоко в визуальном дереве и не может зарегистрировать обработчик событий на таком высоком уровне.

2. Я понимаю, что вы имеете в виду, вы вообще не используете MainWindow для регистрации события. Так что, возможно, это тот ответ, который мне нужен, я рассмотрю его снова.

3. Есть ли какой-либо способ отменить регистрацию обработчика класса?

4. Нет способа отменить регистрацию обработчика класса, но в большинстве случаев это не требуется