ちなみに、非常にクールなコンセプトであるルーテッドイベントについて読んでいます。子要素からルート要素に向かってイベントバブリングがどのように機能するかは理解していますが、イベントトンネリングがどのように機能するかはわかりません。1つのボタンをグリッドに配置し、previewKeyupイベントをすべてにアタッチする小さな例を作成しましたが、キーイベントを押した後、ルートレベルで処理され、子にトンネリングされません。
<Window x:Class="ExplorerContentControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Content Control" Height="400" Width="400" FontFamily="Calibri" FontSize="13" FontWeight="Bold" Button.Click ="Window_Click" PreviewKeyUp="Window_PreviewKeyUp" >
<Grid Button.Click ="Grid_Click" PreviewKeyUp="Grid_PreviewKeyUp">
<Button Name="btnClickedMe" Click="btnClickedMe_Click" Margin="3" HorizontalAlignment="Left" Height="25" Width="80" Content="Click Me" PreviewKeyUp="btnClickedMe_PreviewKeyUp" />
</Grid>
</Window>
コードビハインドにいる間
private void btnClickedMe_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("From Btn Clicked");
}
private void Grid_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("at Grid Location...");
}
private void Window_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("at Windows Location ...");
}
private void Window_PreviewKeyUp(object sender, KeyEventArgs e)
{
MessageBox.Show("PreviewKeyUp From Windows...");
}
private void Grid_PreviewKeyUp(object sender, KeyEventArgs e)
{
MessageBox.Show("PreviewKeyUp From Grid...");
}
private void btnClickedMe_PreviewKeyUp(object sender, KeyEventArgs e)
{
MessageBox.Show("PreviewKeyUp From Button...");
}
イベントバブリング中、適切なメッセージボックスがからbuttonClick
に表示されますWindowClick
が、同じシナリオでは表示されませんPreviewKeyup
。私の例でイベントトンネリングがどのように機能するかを誰かに説明してもらえますか?