2009-06-10 7 views
2

У меня есть кнопка, которую я запускаю OnClick всякий раз, когда есть щелчок по этой кнопке. Я хотел бы знать, какая кнопка мыши нажата на эту кнопку?Как определить, какая кнопка мыши вызвала событие click в WPF?

Когда я использую Mouse.LeftButton или Mouse.RightButton, как говорят мне «realsed», которая является их состояния после щелчка.

Я просто хочу знать, какой из них нажал на мою кнопку. Если я изменю EventArgs на MouseEventArgs, я получаю ошибки.

XAML:<Button Name="myButton" Click="OnClick">

private void OnClick(object sender, EventArgs e) 
{ 
//do certain thing. 
} 
+0

спасибо, что Хосе отредактировал мое сообщение. – paradisonoir

+0

Я нашел лучший метод, который я изначально предложил, и отредактировал свой ответ, чтобы включить его. – rmoore

ответ

2

Если вы используете только Нажмите на событие кнопки, затем только кнопку мыши, которая будет срабатывать это основная кнопка мыши.

Если вам все еще нужно знать, была ли она левой или правой кнопкой, вы можете использовать SystemInformation для ее получения.

void OnClick(object sender, RoutedEventArgs e) 
    { 
     if (SystemParameters.SwapButtons) // Or use SystemInformation.MouseButtonsSwapped 
     { 
      // It's the right button. 
     } 
     else 
     { 
      // It's the standard left button. 
     } 
    } 

Edit: МОФ эквивалент является SystemParameters о системе, которые могут быть использованы вместо. Хотя вы можете включить System.Windows.Forms в качестве ссылки для получения SystemInformation без какого-либо неблагоприятного воздействия на приложение.

+0

спасибо для подсказки. Хотя мой не является System.Windows.Form.It является XAML-окном (WPF). – paradisonoir

+0

... да, все мое развитие в XAML или Silverlight. Это для WPF, как вы можете ясно видеть RoutedEventArgs, System.Windows.Forms.Systeminformation - это самый лучший и быстрый способ получить системную информацию компьютера в WPF. – rmoore

+0

Да, это сработало очень хорошо. – paradisonoir

0

Вы правы, Хосе, это с Mouseclick событием. Но вы должны добавить немного делегата:

это.button1.MouseDown + = новый System.Windows.Forms.MouseEventHandler (this.MyMouseDouwn);

И использовать этот метод в вашей форме:

private void MyMouseDouwn(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
      this.Text = "Right"; 

     if (e.Button == MouseButtons.Left) 
      this.Text = "Left"; 
    } 
+2

Это неверно для WPF, вам нужно будет использовать MouseButtonEventArgs, и у него нет свойства кнопки, но вместо состояния каждой кнопки. – rmoore

+0

, но даже с private void OnClick (отправитель объекта, MouseButtonEventArgs e), он дает мне ту же ошибку с ошибкой «Нет перегрузки для« OnClick »соответствует делегату« System.Windows.RoutedEventHandler » – paradisonoir

+0

Я удалил делегата OnClick. –

2

Вы можете бросить, как показано ниже:

MouseEventArgs myArgs = (MouseEventArgs) e; 

А затем получить информацию:

if (myArgs.Button == System.Windows.Forms.MouseButtons.Left) 
{ 
    // do sth 
} 

Решение работает в VS2013, и вы не должны больше использовать MouseClick событие;)

Смежные вопросы