2013-12-17 3 views
3

저는 아주 간단한 응용 프로그램을 가지고 있지만 문제가 있습니다. 나는 (Grid 상에) 버튼을 가지고 있으며, 사용자가 런타임에 그것을 클릭 할 때, 사용자가 클릭 한 버튼의 부분 (X, Y 좌표)을 알고 싶다. 이제 매개 변수 "e"가 "RoutedEventArgs"유형이므로 Click 이벤트 핸들러에서 마우스 위치를 추적 할 수 없으며 마우스 클릭이 발생한 지점의 위치를 ​​제공하지 않습니다.Wpf 응용 프로그램이 이벤트에 올바르게 응답하지 않습니다.

따라서 다른 이벤트 처리기 인 "MouseLeftButtonDown"이벤트를 시도했습니다. 여기에는 마우스 커서 위치를 지정할 수있는 GetPosition() 메서드를 제공하는 "e"매개 변수가 있습니다. 하지만 문제는 런타임에이 버튼을 클릭하면이 이벤트 핸들러가 전혀 호출되지 않는다는 것입니다. 두 이벤트 처리기에 대한 내 코드는 다음과 같습니다.

private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     string sName = sender.GetType().Name; 
     string sSrc = e.Source.ToString(); 
     string soSrc = e.OriginalSource.ToString(); 

     MessageBox.Show("Sender Name: " + sName + ",\nSource: " + sSrc + ",\nOrigSource: " + soSrc + ",\nevent:" + e.RoutedEvent.ToString()); 
    } 

    private void button1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     string sName = sender.GetType().Name; 
     string sSrc = e.Source.ToString(); 
     string soSrc = e.OriginalSource.ToString(); 
     textBox1.Text = "LeftButtonPressed on button1"; 
    } 

이벤트 처리기 만 클릭하면 작동합니다. MouseLeftButtonDown 이벤트 핸들러 만 유지하면 작동하지 않습니다. 둘 다 유지하면 Click 이벤트 핸들러 만 호출됩니다. 아무도 도와 줄 수 있니 ??

미리 감사드립니다.

+0

가 제거 당신이 같이 할 이벤트가 처리 된 경우에도 화재 리스너를 추가 할 수 있습니다 messagebox –

답변

0

Button 컨트롤은 Click 이벤트의 일부로 MouseLeftButtonDown 이벤트를 가동합니다 ("처리됨"으로 표시됨). 당신이 Button를 서브 클래스하고 OnMouseLeftButtonDown 이벤트를 무시할 수, 또는

button1.AddHandler(Button.MouseLeftButtonDownEvent, 
    new MouseButtonEventHandler(button1_MouseLeftButtonDown), 
    true // also capture handled events 
); 

:

public class ExtendedButton : Button 
{ 
    protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) 
    { 

    } 
} 
+0

버튼에 대한 MouseLeftButtonDown 및 MouseLeftButtonUp 이벤트는 어떻게 될지에 대해 좀 더 자세히 설명해 주시겠습니까? Click 이벤트가 이러한 이벤트를 삼킨다면 마우스 버튼 업과 마우스 버튼 다운 이벤트에 대해 다른 기능을 원한다면 어떻게 할 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다. – user2755525

+0

@ user2755525 위에서 설명한 것처럼 코드에서 수동으로 핸들러를 추가 할 수 있습니다 (XAML에서 "처리 된 이벤트 너무"수신기를 추가 할 수 있다고 생각하지 않습니다). 방금 다른 대안을 추가했습니다. 'Button'은 왼쪽 마우스 클릭에 대해 보호 된 재정의를 제공하므로 하위 클래스를 만들어 그런 식으로 처리 할 수 ​​있습니다. – McGarnagle

+0

도움을 많이 주셔서 감사합니다. 나는이 옵션들을 시도 할 것이다. 다시 한번 감사드립니다. – user2755525

관련 문제