2010-02-18 3 views
1

마우스 오버시 컨트롤 유형을 가져오고 싶습니다. 도와주세요마우스 오버시 컨트롤 유형 가져 오기

+0

자세한 내용이 필요합니다. 실제 이벤트를 참조하는 mouseover 이벤트가 없습니다. MouseMove 또는 MouseEnter? 동일한 이벤트 핸들러를 다른 유형의 여러 컨트롤에 연결하고 어떤 유형이 실행 중인지 확인하고 싶습니까? 또는 버블 링 이벤트 처리기를 부모 컨테이너에 연결하려고합니까? – AnthonyWJones

답변

1

을하는 오버 마우스가 현재 MouseMove 이벤트를 사용하여 이동 중입니다. 버블 링 이벤트이므로 Canvas와 같은 컨테이너에 핸들러를 연결할 수 있습니다.

마우스가 현재 움직이는 UIElement는 MouseEventArgsOriginalSource 속성에서 가져올 수 있습니다. 당신이 할 수 있습니다 유저가 마우스를 이동할 때 당신은주의가 필요하지만

void Canvas_MouseMove(object sender, MouseEventArgs e) 
{ 

    Type currentType = e.OriginalSource.GetType(); 
    // Make decisions based on value of currentType here 
} 

, MouseMove 이벤트가 자주 화재 -이 : 따라서

마우스는이 같은 코드를 사용할 수 있습니다 이동하는 동안 유형을 확인하려면 마지막으로 마우스를 움직 인 후 일정 시간이있을 때까지 무거운 작업을 연기하십시오.

불행히도 이벤트에 버블 링하는 마우스가 없습니다.

다른 대안은 캔버스에 추가하는 각 자식 UIElement에 동일한 MouseEnter 처리기를 연결하는 것입니다. 이 경우 e.OriginalSource 대신 sender을 사용할 수 있습니다. 요소가 Canvas에서 제거되면 핸들러를 제거하는 데주의해야합니다. 그렇지 않으면 메모리 누수로 보이는 것을 만들 수 있습니다.

0

mouse_enter 이벤트를 컨트롤에 추가하십시오.

var x = sender.GetType(); 

을 따를

당신은 당신은 다음과 같이 사용하여 비교할 수있는 코드의 라인과 형태를 얻을 수 있습니다 : 당신은 UIElement에의 유형을 얻을 수 있습니다

if (x.Equals(typeof(TreeView))) 
+0

답장을 보내 주셔서 감사합니다. Johannes 그러나 난 내 컨테이너에 여러 컨트롤을 말합니다 타원, 사각형, TextBlock 등 ... 그리고 하나의 함수에서 형식을 얻을 수 있어야합니다 – Sathish

관련 문제