2011-09-30 3 views
2

3 개의 행을 포함하는 그리드가 있으며, 그 중 하나에는 편집 가능한 TextBox가 있습니다. 그리드는 드래그 기능을 제공하여 캔버스 주위를 이동할 수있게 해줍니다. 이 기능을 사용하려면 마우스 클릭을 부모 개체로 전달할 수 있도록 IsHitTestVisible을 false로 설정해야합니다.그리드 행에 대해 히트 테스트 표시 속성을 다르게 지정합니다.

문제는, 내가 할 때, 히트 테스트가 True로 설정된 경우에도 그리드에서 텍스트 상자를 선택할 수 없다는 것입니다.

<Grid Background="{StaticResource NodeBackground}" IsHitTestVisible="True"> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="2*"/> 
          <RowDefinition Height="1*"/> 
          <RowDefinition Height="2*"/> 
         </Grid.RowDefinitions> 
         <TextBox Text="{Binding Data}" Foreground="White" Background="Transparent" FontFamily="Consolas" FontSize="15" TextAlignment="Center" Grid.Row="1" BorderThickness="0" /> 
        </Grid> 

은 당 행으로 히트 테스트 속성을 설정하는 것이 가능하기 때문에 두 개의 빈 행 중 하나가 공격한다면, 그들은 할 수 여전히 부모 컨테이너 위에 클릭을 통과하지만, 계속 것 중간 행의 텍스트 상자를 선택 하시겠습니까?

건배.

+0

왜 'IsHitTestVisible'이 필요한가요? [이벤트 버블 링] 덕분에 (http://msdn.microsoft.com/en-us/library/ms742806.aspx#routing_strategies) 그리드의 부모는 Grid의 모든 마우스 이벤트를 가져 오며, 여기에는 'TextBox '. 내가 놓친 게 있니? –

+0

끌어서 놓기 논리를 공유하십시오. 일반적으로 @ alpha-mouse와 마찬가지로 예상대로 작동하기 때문입니다. –

답변

0

드래그/드롭 코드가 확실하지 않지만 트리거를 사용할 수 있습니다. IsHitTestVisibleFalse 인 경우에만 항목을 드래그하고 나머지는 True로 설정하십시오.

부수적으로 WPF에 내장 된 DragDrop 기능과 히트 테스트를 사용하여 문제가 발생했습니다. 나는 드래그를위한 MouseEnter/MouseLeave 이벤트와 같은 MouseEvents를 사용하는 것이 훨씬 간단하다는 것을 알았습니다.

관련 문제