深入显出WPF 第二部分(15)
深入浅出WPF 第二部分(15)
e.OriginalSource:查看事件的源头。
第8章 深入浅出话事件
8.1 近视WPF的树形结构
WPF中有两种"树":一种叫逻辑树(Logical Tree),一种叫可视元素树(Virtual Tree)。那么当一个路由事件被激发后是沿着Virtual Tree传递的。
8.2 事件的来龙去脉
事件模型的几个关键部分:
- 事件的拥有者:myButton。
- 事件:myButton.Click。
- 事件的响应者:窗体本身。
- 事件处理器:this.myButton_Click方法。
- 订阅关系:可以在Form1.Designer.cs文件中找到一句代码是 this.buttonLogin.Click += new System.Windows.RoutedEventHandler(this.buttonLogin_Click);
8.3 深入浅出路由事件
8.3.1 使用WPF内置路由事件
<Grid x:Name="gridRoot" Background="Lime"> <Grid x:Name="gridA" Margin="10" Background="Blue"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Canvas x:Name="canvasLeft" Grid.Column="0" Background="Red" Margin="10"> <Button x:Name="buttonLeft" Content="Left" Width="40" Height="100" Margin="10"/> </Canvas> <Canvas x:Name="canvasRight" Grid.Column="1" Background="Yellow" Margin="10"> <Button x:Name="buttonRight" Content="Right" Width="40" Height="100" Margin="10"/> </Canvas> </Grid> </Grid>
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.AddHandler(Button.ClickEvent, new RoutedEventHandler(this.ButtonClicked)); } private void ButtonClicked(object sender, RoutedEventArgs e) { MessageBox.Show((e.OriginalSource as FrameworkElement).Name); } }
e.OriginalSource:查看事件的源头。
为元素添加路由处理器的事情在XAML中也可以完成,只需要把XAML代码改成这样即可:
<Grid x:Name="gridRoot" Background="Lime" ButtonBase.Click="ButtonClicked"> <Grid x:Name="gridA" Margin="10" Background="Blue"> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Canvas x:Name="canvasLeft" Grid.Column="0" Background="Red" Margin="10"> <Button x:Name="buttonLeft" Content="Left" Width="40" Height="100" Margin="10"/> </Canvas> <Canvas x:Name="canvasRight" Grid.Column="1" Background="Yellow" Margin="10"> <Button x:Name="buttonRight" Content="Right" Width="40" Height="100" Margin="10"/> </Canvas> </Grid> </Grid>