WPF之事件路由
<Window x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="650" Width="400" MouseUp="Test_MouseUp">
<Grid MouseUp="Test_MouseUp">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition Height="50"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Label BorderBrush="Blue" BorderThickness="1" HorizontalAlignment="Center" VerticalContentAlignment="Top">
<StackPanel MouseUp="Test_MouseUp" Orientation="Vertical">
<TextBlock MouseUp="Test_MouseUp">This is First</TextBlock>
<Image Source="D:\\1.png" Height="120"></Image>
<TextBlock>This is Second</TextBlock>
</StackPanel>
</Label>
<ListBox Grid.Row="1" x:Name="lbMessage"></ListBox>
<CheckBox x:Name="cbHandled" Grid.Row="2" Content="Handle First Event"/>
<Button Grid.Row="3" Height="40" Width="100" Margin="0,0,10,0" Content="Clear"></Button>
</Grid>
</Window>
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void MyControl_click(object sender, RoutedEventArgs e)
{
}
private int count;
private void Test_MouseUp(object sender, MouseButtonEventArgs e)
{
count++;
string res = $"#{count}\r\n Sender:{sender}lSource:{e.Source};";
lbMessage.Items.Add(res);
//e.Handled = false; // 继续向下传递
//e.Handled = true; // 不继续向下传递
e.Handled= (bool)cbHandled.IsChecked!;// !进行非空检查
}
}
}
附加事件
父控件给所有子控件添加事件
隧道事件
由上-父控件传下-子控件