none
이벤트 버블링문제 RRS feed

  • 질문

  • WPF에서 그룹박스에 텍스트박스 컨트롤이 있습니다.

    텍스트박스 그룹박스 둘다 MouseDoubleClick이벤트를 만들었습니다.

    저는 텍스트박스를 더블클릭할때 그룹박스 더블클릭이벤트가 안일어나게 하고 싶습니다.

    e.Handled = true; 를 텍스트박스 더블클릭이벤트핸들러에 추가해도

    그룹박스 이벤트 더블클릭 이벤트가 발생합니다. 버그인가요?

    public MainWindow()
            {
                InitializeComponent();
                textBox1.MouseDoubleClick += new MouseButtonEventHandler(textBox1_MouseDoubleClick);
                groupBox1.MouseDoubleClick += new MouseButtonEventHandler(groupBox1_MouseDoubleClick);            
            }        
    
            void groupBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                ...
            }
    
            void textBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {            
                ...
                e.Handled = true;
            }
    

     

     

    2011년 9월 20일 화요일 오후 4:51

모든 응답

  • 버그가 아닙니다. MouseDoubleClick 이벤트는 Bubble 타입이 아닌, Direct 유형이기 때문이라고 합니다.

    검색해 보니, 아래와 같은 질문들이 있군요. ^^

    MouseDoubleClick events don't bubble
    ; http://stackoverflow.com/questions/6279724/mousedoubleclick-events-dont-bubble

    MSDN 문서에도 이에 대해 Direct 이벤트이기 때문에 e.Handled 로는 막을 수 없다고 나옵니다.

    따라서, 위의 stackoverflow 답변에 나온 것처럼 우회적으로 해결해야 합니다.

    1. TextBox의 PreviewMouseLeftButtonDown에서 ClickCount == 2 인 경우를 판별해서 e.Handled = true로 설정하거나,
    2. TextBox의 MouseDoubleClick 에서 별도의 플래그 변수를 두고, groupBox의 MouseDoubleClick 에서 처리하지 않도록 하는 방법.

    둘 중의 하나를 사용해야 할 것 같습니다. ^^

    2011년 9월 21일 수요일 오전 12:42
  • 안녕하십니까? Dduckbocke

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “이벤트 버블링문제”에 대한 답변을 드리겠습니다.

               

    제 생각에는 한 가지 해결 방안이 있습니다.

     

    e.Handled 변수 사용을 PreviewMouseDoubleClick 이벤트 핸들러에서 사용하시기 바랍니다.

     

    private void TextBox_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show("Text Box Preview Double Click Event.");
        e.Handled = true; 
    }        

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 9월 21일 수요일 오전 12:56
    중재자
  • 안녕하십니까? Dduckbocke

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다. 하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다.

    • 답변으로 제안됨 _ALTOIDS_ 2011년 10월 27일 목요일 오전 3:30
    • 답변으로 제안 취소됨 _ALTOIDS_ 2011년 10월 27일 목요일 오전 3:30
    2011년 9월 29일 목요일 오전 5:41
    중재자