2009-06-10 2 views
2

해당 버튼을 클릭 할 때마다 OnClick을 트리거하는 버튼이 있습니다. 어떤 마우스 버튼이 그 버튼을 클릭했는지 알고 싶습니다.WPF에서 어떤 마우스 단추로 클릭 이벤트가 발생했는지 어떻게 알 수 있습니까?

Mouse.LeftButton 또는 Mouse.RightButton을 사용할 때 모두 클릭 후 상태가 "Realsed"이라고 말하면

버튼 하나를 클릭했는지 알고 싶습니다. EventArgsMouseEventArgs으로 변경하면 오류가 발생합니다.

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

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

내 게시물을 편집 해 주신 Jose에게 감사드립니다. – 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. 
     } 
    } 

편집 : SystemInformation WPF에 상당 대신 사용될 수 SystemParameters이다. 어떤 식 으로든 응용 프로그램에 악영향을 미치지 않으면 서 SystemInformation.Forms를 참조로 포함하여 SystemInformation을 얻을 수 있습니다.

MouseEventArgs myArgs = (MouseEventArgs) e; 

그리고 그와 함께 정보를 얻을 : 당신은 아래와 같이 캐스트 할 수

+0

감사합니다. 힌트를 위해. 내 시스템은 윈도우가 아니다. 폼 .XAML 윈도우 (WPF). – paradisonoir

+0

... 네, 모든 개발은 XAML이나 Silverlight에 있습니다. 이것은 WPF를위한 것입니다. RoutedEventArgs, System.Windows.Forms.System 정보는 WPF에서 컴퓨터의 시스템 정보를 얻는 가장 빠르고 쉬운 방법입니다. – rmoore

+0

예. 매우 잘 작동했습니다. – paradisonoir

0

네 말이 맞아, 호세, 그것은 MouseClick과 이벤트와입니다. 하지만 약간의 대리자를 추가해야합니다.

this.button1.MouseDown + = new 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

심지어 심지어 개인 무효 OnClick (개체 발신자, MouseButtonEventArgs 전자), 그것은 나에게 "OnClick에 대한 과부하가 없습니다."라는 위임 오류와 동일한 오류를 제공합니다. – paradisonoir

+0

OnClick 델리게이트를 삭제했습니다. –

2

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

이 솔루션은 VS2013에서 작동하며 더 이상 MouseClick 이벤트를 발생 사용할 필요가 없습니다를)

관련 문제