Событие клика в UserControl- WPF - PullRequest
6 голосов
/ 11 июля 2010

В моем приложении WPF есть UserControl.Я хочу вызвать событие щелчка и сделать некоторые вещи, когда пользователь щелкнул элемент UserControl.Проблема в том, что у UserControl нет события click.Я искал в Интернете и обнаружил, что вы можете использовать событие MouseLeftButtonUp.Я попробовал это - но это не отвечает на мои щелчки.Есть идеи?Спасибо!

Ответы [ 3 ]

9 голосов
/ 11 июля 2010

Вы не написали, что пытаетесь сделать, но если вам нужно событие щелчка, возможно, вы пишете какую-то кнопку (класс Button на самом деле «то, что вы можете нажать» с визуальным представлением в шаблоне элемента управления, который вы можно заменить)

  • Если вам нужна кнопка со сложным содержимым внутри - поместите свой пользовательский элемент управления внутри кнопки
  • Если вам нужна кнопка, которая не похожа на кнопку, напишите шаблон пользовательского элемента управления для кнопки
  • Если вам нужна кнопка с кнопкой подкласса дополнительной функциональности, добавьте дополнительные данные / поведение в код и поместите дисплей XAML в стиль.
4 голосов
/ 11 июля 2010

Я думаю, что для ваших нужд событие PreviewMouseLeftButtonUp (Down) более подходит. Затем вам нужно обработать ClickCount для подсчета количества кликов, а затем вызвать собственное событие, на котором другие элементы управления будут знать, что ваш элемент управления нажат. Существует гораздо больше методов обработки события клика. Вы должны посмотреть на эту статью MSDN и это

ОБНОВЛЕНИЕ для обработки как Click, так и DoubleClick

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        _myCustomUserControl.MouseLeftButtonUp += new MouseButtonEventHandler(_myCustomUserControl_MouseLeftButtonUp);
        _myCustomUserControl.MouseDoubleClick += new MouseButtonEventHandler(_myCustomUserControl_MouseDoubleClick);
    }

    bool _doubleClicked;        

    void _myCustomUserControl_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        _textBlock.Text = "Mouse left button clicked twice";
        _doubleClicked = true;
        e.Handled = true;    
    }

    void _myCustomUserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        if (_doubleClicked)
        {
            _doubleClicked = false;
            return;
        }

        _textBlock.Text = "Mouse left button clicked once";
        e.Handled = true;           
    }        
}

Чтобы протестировать этот пример, назовите свой элемент управления _myCustomUserControl и добавьте TextBlock с именем _textBlock в свой MainWindow.xaml

2 голосов
/ 28 марта 2013

Почему бы просто не использовать MouseDown?

Поместите событие в элемент управления пользователя и просто сделайте это:

private void MyControl_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.ChangedButton == MouseButton.Left)
    {
        MessageBox.Show("Clicked!");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...