2011-03-09 2 views
1

자식 usercontrol에서 부모로 이벤트를 버블 링하려고합니다. 내가 정의Silverlight usercontrols에서 이벤트를 버블 링하는 방법은 무엇입니까?

<UserControl> 
    <StackPanel> 
     <customs:myButton CustomClick="something" /> 
     <customs:myButton CustomClick="something" /> 
     <customs:myButton CustomClick="something" /> 
     etc. 
    </StackPanel> 
</UserControl> 

자식 UserControl을에서 :

<UserControl> 
    <Grid> 
     <Button Click="Button_Click" /> 
    </Grid> 
</UserControl> 

부모 UserControl을이 자식 컨트롤의 인스턴스로 구성되어

자식 UserControl을 격자 내부의 버튼입니다

public delegate void CustomClickHandler(object sender, EventArgs e); 
    public event CustomClickHandler CustomClick; 

"내부"버튼은 다음과 같은 방식으로 click 이벤트를 처리합니다.

private void Button_Click(object sender, EventArgs e) 
    { 
     if (CustomClick != null) 
      CustomClick (sender, e); 
    } 

나는 무슨 일이 일어나고 있는지 확인하기 위해 노력했습니다, 그리고 나는 Button_Click가 맞춤 클릭가 null는 아니고, 호출되고이 실행됩니다 볼 수 있습니다. 아무 것도 일어나지 않을 것입니다, 부모 usercontrol조차도 그것에 붙어있는 코드는 호출되지 않습니다.

의견이 있으십니까?

미리 감사드립니다. 건배, Gianluca.

답변

0

찾고있는 것은 라우팅 된 이벤트입니다. 나만의 맞춤 작성을하거나이 library을 살펴볼 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그게 문제라고 생각했고, 나는 버블 링을 스스로 구현하려고했습니다. lib가 이미 존재하는 것이 좋다. 그러나 나는 다른 문제에 직면하고있다 생각 : 나는 "탭"과 "myButton"의 여러 인스턴스를 통해 이동할 수 있지만 마우스를 사용하여 그들 중 누구와도 선택하거나 상호 작용할 수 없습니다 ... 당신은 이것을 생각합니까 문제가 어떻게 든 관련이 있습니까? –

+0

라우트 이벤트가 마우스에만 해당되는 경우에는 단추 자체에 대한 이벤트 처리를 건너 뛸 수 있습니다.주에서 일합니까? 마우스가 움직이는 것처럼. –

+0

빠른 업데이트. 상위 usercontrol은 다른 usercontrol 안에 있습니다 (shellView는 많은 키패드 버튼을 포함하는 키패드를 포함합니다). shellle에 정의 된 첫 번째 Grid에 대해 mouseleftdown 이벤트가 발생하는 것을 볼 수 있습니다. 다른 내부 컨트롤 중 하나에서 이벤트를 잡으려고하면 작동하지 않습니다. 어떤 생각? –

0

좋아, 내가 이것을 정리했지만 몇 가지 문제가있었습니다.

첫 번째 문제는 IsHitTestVisible 때문이었습니다. 일부 온라인 기사에서는 일부 마우스 이벤트 관련 문제를 해결하기 위해 해당 속성을 false로 설정했다고합니다. 나는 그렇게했다. 그러나 그 속성이 false로 설정된 요소가 마우스 이벤트를 "잡아"왔기 때문에 더 이상 내부 usercontrols에 도착하지 않았기 때문에 잘못되었다.

둘째, 가장 내부 단추 (이 시나리오를 이해하려면 위의 내 게시물 참조)에서이 작업을 수행하려면 ClickMode = "Hover"를 설정하고 MouseLeftButtonUp 이벤트를 처리해야했습니다. 나는 표준 클릭을 사용하려고 노력할 것입니다. 그러나 어딘가에는 특정 이벤트 버블 (bubble up) 만 읽을 수 있습니다 ...

e.Handled는 변경하지 않아도됩니다.

이 나도는

가 나는 문제를 해결하기 위해 한 다른 것을 생각할 수 없다 ... 어떤 RoutedEvent 라이브러리를 사용할 수 없었다.

나는 이것이 모두라고 생각합니다.

언제나 제안 사항이 있으시면 언제든지 여기에 추가하십시오.

환호, Gianluca.