2010-07-16 3 views
4

나는 캔버스 (다른 컨테이너 내에 있지만 중요하지 않음)에 Rectangle이있는 매우 간단한 테스트 컨트롤을 만들었습니다. Rectangle에는 마우스 작동 중지, 마우스 이동 및 마우스 작동을위한 이벤트 핸들러가 있습니다. Rectangle의 MouseLeftButtonDown 이벤트에서 마우스를 캡처하면 해당 MouseLeftButtonUp 이벤트를받지 못합니다.마우스 캡처 후 Silverlight 마우스 이벤트가 손실됩니까?

일부 코드 :

private void rect1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (_captured = CaptureMouse()) 
    { 
     _offset = new Point(Canvas.GetLeft(rect1), Canvas.GetTop(rect1)); 
     _origin = e.GetPosition(RootCanvas); 
     e.Handled = true; 
    } 
} 


private void rect1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    if (_captured) 
    { 
     ReleaseMouseCapture(); 
     _captured = false; 
     e.Handled = true; 
    } 
} 

난 그냥 확실히 그 중 하나는 어떻게 든 마우스 업 이벤트를 받고되지 않았습니다 할뿐만 아니라 컨테이너 요소에 대한 이벤트 처리기를 부착,하지만 그들 중 누구도 없었다. Silverlight에서 아직 배운 적이 없다는 기대가 있습니까?

+0

WPF 응용 프로그램에서 비슷한 문제가 발생했는데 다른 마우스 단추를 눌렀을 때 마우스를 잡으려고 시도하면서이를 닫습니다. 왼쪽 버튼을 누르는 것 외에는 아무런 효과가 없다는 것을 깨달은 나는 그 방법을 포기하고 더 이상 문제를 조사하지 않았다. – ChrisF

답변

2

저는 실제로 마우스 이벤트를 캡처하는 것에 대해 약간 혼란 스럽다고 생각합니다.

if (_captured = CaptureMouse()) 

실제로에 대해 CaptureMouse를 호출되고 어떤 객체입니다 - :이 작업을 수행 할 때

고려?

답변 : 코드가 코드 숨김 인 사용자 정의 컨트롤입니다. 직사각형에서 마우스를 캡처하기를 원한다면 : -

if (_captured = rect1.CaptureMouse()) 
+0

주의를 기울이지 않으면 서 너무 혼란스럽지 않습니다. 이것은 오늘의 나의 페이스 플렘 순간이다. 무엇이 분명해야했는지 지적 해 주셔서 감사합니다. – redman

1

CaptureMouse(); mouseDown 이벤트에서 가져온 다음 시도하십시오.

관련 문제