2011-08-17 10 views
0

는이 같은 그리드 있습니다캡처 마우스 이벤트

<Grid> 
     <WrapPanel Name="wrap1"/> 
     <Canvas Name="canvas1" Background="LightGray" Opacity="0.5"/>  
    </Grid> 

을 그리고 난 할 수 있도록하려면 다음 WrapPanel 버튼에 대한

  • 캡처 클릭 이벤트
  • 캡처 mouseLeftButtonDown,하는 MouseLeftButtonUp , 캔버스의 mouseMove 이벤트

WrapPanel Button PreviewMouseLeftButtonDown 및 Click이 작동하지 않습니다. 또한 Canvas를 WrapPanel 또는 Canvas 내부의 WrapPanel에 배치해도 작동하지 않습니다.

답변

1

VisualTree에서 WrapPanel과 Canvas가 부모/자식 관계에 있지 않습니다. WrapPanel은 캔버스를 모욕하지 않으므로 마우스 이벤트가 거품을 일으키지 않습니다. WrapPanel에 Canvas를 포함해야합니다. 그런 다음 이벤트를 둘 다 사용할 수 있어야합니다.

편집 :

<WrapPanel Name="wrap1" MouseLeftButtonDown="wrap1_MouseLeftButtonDown"> 
    <Canvas Name="canvas1" 
     Width="{Binding ElementName=wrap1, Path=ActualWidth}" 
     Height="{Binding ElementName=wrap1, Path=ActualHeight}" 
     Background="LightGray" Opacity="0.5" 
     MouseLeftButtonDown="canvas1_MouseLeftButtonDown"/> 
</WrapPanel> 

Remeber이 미리보기 이벤트 : 여기

이 두 이벤트를 발생 내 코드입니다 (I는 또한 패널을 채울 것입니다 수 있도록 포함 WrapPanel 내 캔버스 너비/높이 바운드) VisualTree에서 비표준 이벤트가 아래쪽에 위치하기 때문에 Preview 이벤트를 사용하면 WrapPanel 이벤트가 먼저 발생하지만이 코드는 Canvas 이벤트를 먼저 발생시킵니다.

+0

그렇게하면 캔버스에 마우스 입력이 발생하지 않습니다. – Cobold

+0

나는 이것을 시험해 보았고 잘 동작한다. 캔버스에 크기가 설정되어 있는지 확인해야한다. 예를 들어, 디파르트는 WrapPanel을 채우지 않을 것이다. –

0

편집 : WrapPanel에서 각 버튼의 클릭 이벤트에 첨부해야합니다. 이벤트가 동적으로 추가 된 경우 이벤트를 첨부하여 랩 패널에 추가하십시오.

+0

죄송합니다. 나는 당신의 질문을 잘못 읽었습니다. 그런 다음 WrapPanel의 각 버튼에 대한 클릭 이벤트에 첨부해야합니다. 이벤트가 동적으로 추가 된 경우 이벤트를 첨부하여 랩 패널에 추가하십시오. – Tejs

+0

저는 이미이 작업을 동적으로 처리하고 있습니다. – Cobold