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