В WPF большинство элементов управления имеют события MouseUp
и MouseDown
(и специфичные для кнопки мыши варианты), но не простое событие Click
, которое можно использовать сразу.Если вы хотите иметь поведение, похожее на щелчок, с использованием этих событий, вам нужно обработать оба, которые я считаю немного болезненными.
Очевидная проблема заключается в том, что вы не можете просто пропустить событие MouseDown
, потому чтоесли ваш щелчок запущен на другом элементе управления и он выпущен поверх элемента управления, который обрабатывает только MouseUp
, то ваш предполагаемый щелчок будет срабатывать, хотя в действительности это не должно происходить: и MouseUp
, и MouseDown
должны происходить с одним и тем же элементом управления.
Так что мне было бы интересно найти более элегантное решение этой общей проблемы, если оно есть.
Примечания: Существует несколько хороших решений для этого, как можно видетьниже, я решил принять ответ Рэйчел, потому что он, кажется, был хорошо принят, но дополнительно я хотел бы добавить следующие аннотации:
ответ Рэйчел на кнопку довольно чистый и прямой, новам нужно обернуть свой фактический элемент управления в кнопку, а в некоторых случаях вы можете не считать свой элемент управления кнопкой только потому, что ят можно щелкнуть (например, если это больше похоже на гиперссылку), далее вам нужно каждый раз ссылаться на шаблон.
ответ Рика Слэдки о поведении более прямо отвечает на оригинальный вопрос о том, какпросто имитируйте щелчок / сделайте элемент управления кликабельным, недостатком является то, что вам нужно ссылаться на System.Windows.Interactivity
, и, как и решение Рэйчел, он немного раздувает Xaml-код.
Мой прикрепленный ответ на событие имеет преимущество в том, что он довольно близок к обычному событию click с точки зрения Xaml-разметки, которое может быть выполнено с одним атрибутом, единственная проблема, которую я вижу с ним, заключается в том, что прикрепление к событию в коде не инкапсулировано (если кто-то знаетисправить это, пожалуйста, добавьте комментарий к ответу).