0
나는 다음과 같은 3 개 중첩 된 요소가 다음 PreviewMouseLeftButtonDown
방법 중 하나에WPF 이벤트 버블 링 및 터널링
내가 이벤트를 처리
...
e.Handled = true;
합니다.KeyUp
이벤트가 전혀 발생하지 않습니다.
내가 댓글을 쓰면 e.Handled = true;
모두 정상적으로 작동합니다.
이벤트가 PreviewMouseLeftButtonDown
과 KeyUp
에 어떻게 든 의존합니까?
터널링/버블 링 페어링 된 이벤트 (예 : PreviewKeyDown 및 키 다운)는 서로 종속되어 있다고 생각했습니다.
private void Level1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine("Level1_PreviewMouseLeftButtonDown");
}
private void Level2_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine("Level2_PreviewMouseLeftButtonDown");
//e.Handled = true;
}
private void Level3_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Debug.WriteLine("Level3_PreviewMouseLeftButtonDown");
}
private void Level3_Click(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Level3_Click");
}
private void Level3_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("Level3_KeyUp");
}
private void Level2_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("Level2_KeyUp");
}
private void Level1_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("Level1_KeyUp");
}
왜 다음 다른 예에서 같은 방식으로 일이되지 않은 : 여기
<DockPanel Name="Level1" PreviewMouseLeftButtonDown="Level1_PreviewMouseLeftButtonDown"
KeyUp="Level1_KeyUp">
<Grid Name="Level2" PreviewMouseLeftButtonDown="Level2_PreviewMouseLeftButtonDown"
KeyUp="Level2_KeyUp">
<Button Height="25"
Width="120"
Name="Level3"
Content="Button"
Click="Level3_Click"
PreviewMouseLeftButtonDown="Level3_PreviewMouseLeftButtonDown"
KeyUp="Level3_KeyUp"/ >
</Grid>
</DockPanel>
이벤트 구현입니까?
<StackPanel PreviewKeyDown="StackPanel_PreviewKeyDown" KeyUp="StackPanel_KeyUp">
<Grid Height="100" PreviewKeyDown="Grid_PreviewKeyDown" KeyUp="Grid_KeyUp">
<Button x:Name="button" Content="Button" Width="100" Height="50" Margin="201,134,216,-84" PreviewKeyDown="button_PreviewKeyDown" KeyUp="button_KeyUp"/>
</Grid>
</StackPanel>
이벤트 구현은 : 당신이 처리 할 때
private void StackPanel_PreviewKeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("StackPanel_PreviewKeyDown " + e.GetHashCode());
e.Handled = true;
}
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("Grid_PreviewKeyDown " + e.GetHashCode());
}
private void button_PreviewKeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("button_PreviewKeyDown " + e.GetHashCode());
}
private void StackPanel_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("StackPanel_KeyUp " + e.GetHashCode());
}
private void Grid_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("Grid_KeyUp " + e.GetHashCode());
}
private void button_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("button_KeyUp " + e.GetHashCode());
}
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
Debug.WriteLine("Window_PreviewKeyDown " + e.GetHashCode());
}
private void Window_KeyUp(object sender, KeyEventArgs e)
{
Debug.WriteLine("Window_KeyUp " + e.GetHashCode());
}
다음 예제에서는 PreviewKeyDown 이벤트 처리기에서 e.Handled로 표시해도 KeyDown ev 실행을 억제하지 않습니다. 매니저. http://www.codeproject.com/Articles/464926/To-bubble-or-tunnel-basic-WPF-events –
Key evt는 아래에 구성된 구성 요소의 시각적 트리에서 관리되기 때문에. –