2010-12-23 2 views
2

wpf 프로젝트에 여러 개의 창이 있습니다. 모든 창에서 , 나는 버튼과 같은 컨트롤을 넣는다. 모든 창에서 컨트롤의 위치가 동일하기 때문입니다. 모든 윈도우의 컨트롤에 대해 MouseLeftButtonUp 이벤트를 정의합니다. 클릭 (마우스 왼쪽 버튼 위로) 컨트롤에서, 나는 다음 창을 만들고 대화 상자를 엽니 다.어떻게하면 다음 WPF에서 요소 위에 여러 마우스 클릭을 차단합니까?

Window2 win2 = new Window2(); 
win2.Owner = this; 
win2.ShowDialog(); 

하지만 내 문제 :

모든 창에있는 모든 위치 컨트롤이 동일하기 때문에 내가 먼저 윈도우의 버튼을 더블 클릭 또는 삼중 클릭을 할 경우, 모든 두 첫 번째 창에 대한 예를 들어 계단식으로 여는 세 개의 창. 그리고 다음 창 하나만 열어 줘.

답장을 보내 주셔서 감사합니다.

+2

수정하지 말고 허용하는 것이 좋습니다. 그것은 기능이 아니라 버그입니다! 프로그램은 사용자가 클릭하는 것만 큼 빠르게 반응합니다 :) 한 번의 작업을 시도 할 때 두 번 클릭하면 해당 오류로 처리 할 수 ​​있습니다. –

답변

4

위의 코멘트를 참조하십시오. 이것을 "설계 상"이라고 생각하고 고칠 수는 없습니다.

수정하기로 결정한 경우 de-bouncing 양식을 구현할 수 있습니다.

  • 응용 프로그램 개체 또는 기본 창 클래스의 필드와 같은 모든 창에서 볼 수있는 일부 전역 상태를 만듭니다.
  • 해당 전역 상태에서 마지막으로 성공한/올바른 클릭 시간을 유지하십시오. DateTime.MinValue (또는 그것이 무엇이든간에)부터 시작하십시오.
  • 클릭에
  • 는, 현재 시간 DateTime.Now
  • 현재 시간 사이의 시간 만약을 잡아, 그리고 아가씨 성공적인 클릭은 (아마도 TimeSpan.FromMilliseconds(500). 귀하 디 바운스 시간 미만) 너무 짧은, 새로운 윈도우를 생성하지 않는
  • 시간 범위가 더 이상 디 바운스 시간보다 경우 양식 후
  • 은 제 2를 다음 마지막으로 성공한/정확한 클릭을 업데이트하고, 그런 다음에야
+0

[디 바운싱 개념] (http://en.wikipedia.org/wiki/Switch#Contact_bounce) –

0

가 처음 버튼을 비활성화 간주 적이 새로운 창을 열고 가능 짐을 실은? 타이머를 사용하여이 작업을 수행 할 수 있습니다.

관련 문제