2011-08-10 4 views
0

C# WPF 응용 프로그램을 만들고 다음 작업을 수행 할 방법을 찾고 있습니다.마우스가 캔버스에서 클릭 한 컨트롤을 아는 방법은 무엇입니까?

다른 단추와 단추가있는 캔버스가 있습니다.

내가 컨트롤이 클릭의 이름을 표시하는 메시지 상자를 얻을 컨트롤 중 하나를 클릭하면 I 버튼에 손 (Canvas.Cursor = Cursors.Hand) 다음

커서 변경을 클릭하면 (이름은 컨트롤의 공용 속성입니다).

다른 곳을 클릭하면 커서가 다시 설정되고 이름을 다시 가져 오기 전에 버튼을 다시 클릭해야합니다.

나는 이벤트와 핸들러를 가지고 노려 보았지만, 내가 원하는 것을 성취 할 수 없었다. 당신은 당신이 Canvas.MouseDown을 사용하여 클릭 된 요소를 얻기 위해 마우스 다운 이벤트 인수의 GetPosition()VisualTreeHelper.HitTest()을 사용할 수 있습니다

+0

이벤트 및 처리기로 게임을 해보았지만 원하는 것을 얻을 수 없다면 아마도 충분히 오래 플레이하지 못했을 것입니다. 시도한 것을 보여줄 수 있습니까? 아마도 버그를 해결할 수 있습니다. – Crisfole

답변

0

을 도움을

당신에게 대단히 감사합니다.

<Canvas Name="myCanvas" MouseDown="MouseDownHandler" /> 

public void MouseDownHandler(object sender, MouseButtonEventArgs e) 
{ 
    HitTestResult target = VisualTreeHelper.HitTest(myCanvas, e.GetPosition(myCanvas)); 

    while(!(target is Control) && (target != null)) 
    { 
     target = VisualTreeHelper.GetParent(target); 
    } 
    // now if target is not null, it's the control that was clicked... 
} 

그럼 당신은 클릭 된 제어를 얻기 위해 (A while 루프) VisualTreeHelper.GetParent()를 사용할 수 있습니다.

+0

고맙습니다. VisualTreeHelper 정확히 내가 무엇을 찾고 있었다 : – Youssef

+0

왜 downvote? –

+0

누가 설명을하지 않고 답을 왜곡합니까? 나는 혼란 스럽다. –

관련 문제