我有以下3个嵌套元素:
当我处理事件时......
任何e.Handled = true;
中的
PreviewMouseLeftButtonDown
方法。KeyUp
事件根本没有被触发。
当我评论e.Handled = true;
时,一切正常。
事件PreviewMouseLeftButtonDown
和KeyUp
是否依赖于某种程度?
我以为只有隧道/冒泡的配对事件(例如 PreviewKeyDown 和 KeyDown )彼此依赖。
<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>
以下是事件实现:
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");
}
为什么在以下不同的例子中没有以相同的方式发生?
<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());
}