2012-03-01 4 views
1

DataGrid 개체의 모든 셀에 대해 MouseDown 이벤트를 catch하려고합니다.처리기가 이벤트를 처리하지 않습니다.

<DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Margin="66,119,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="200" ItemsSource="{Binding}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="ID" Binding="{Binding Path=ID}" /> 
       <DataGridTextColumn Header="Text" Binding="{Binding Path=Text}" /> 
      </DataGrid.Columns> 
      <DataGrid.Resources> 
       <Style TargetType="{x:Type DataGridCell}"> 
        <EventSetter Event="MouseDown" Handler="CellMouseDown" /> 
       </Style> 
      </DataGrid.Resources> 
     </DataGrid> 

하지만 이벤트 핸들러가 호출되지 않습니다. 왜?

답변

3

이벤트가 DataGridCell 내부에서 처리되어 사용자의 처리기에 도달하지 못하는 한 가지 이유가있을 수 있습니다. tunneling 버전의 이벤트는 PreviewMouseDown입니다.

1

귀하의 이벤트는 처리기로가는 동안 다른 처리기에서 처리하고있을 가능성이 큽니다. 호출되는 이벤트 소스에 이벤트 핸들러 :

버블 : 여기

라우팅 이벤트

이벤트의 3 종류가 있습니다에 대한 개요입니다. 라우팅 된 이벤트는 요소 트리 루트에 도달 할 때까지 연속적인 상위 요소로 라우팅됩니다. 대부분의 라우트 된 이벤트는 버블 링 라우팅 전략을 사용합니다. 버블 링 된 라우트 된 이벤트는 일반적으로 입력 또는 상태 변경을 고유 한 컨트롤 또는 다른 UI 요소에서보고하는 데 사용됩니다.

: 소스 요소 자체에만 처리기를 호출 할 수있는 기회가 주어집니다. 이는 Windows Forms가 이벤트에 사용하는 "라우팅"과 유사합니다. 그러나 표준 CLR 이벤트와 달리 직접 라우팅 이벤트는 클래스 처리 (클래스 처리는 다음 섹션에서 설명 할 )를 지원하며 EventSetter 및 EventTrigger에서 사용할 수 있습니다.

터널링 : 초기에 요소 트리 루트의 이벤트 처리기는 이 호출됩니다. 라우팅 된 이벤트는 자식 요소를 경로를 따라 라우트 된 이벤트 소스 (라우트 된 이벤트를 발생시킨 요소) 인 노드 요소쪽으로 이동합니다. 터널링 라우팅 이벤트는 종종 복합 파트의 이벤트가 의 일부로 억제되거나 완전히 제어되도록 이벤트에 의해 의도적으로 억제되거나 대체 될 수 있도록 컨트롤에 대해 합성의 일부로 사용되거나 처리됩니다. WPF에서 제공되는 입력 이벤트는 종종 으로 터널링/버블 링 쌍으로 구현됩니다. 터널링 이벤트는 이기도하며 쌍에 사용되는 명명 규칙 인 규칙 때문에 미리보기 이벤트라고도합니다.

관련 문제