wpf路由事件

1.如果一个窗体中的所有按钮都执行同一个事件如click事件,则简洁方法如下:

 1 <Grid>
 2    <StackPanel Margin="5" Button.Click="ButtonClick" Focusable="False">
 3       <Button>BubbledLabelClick</Button>
 4       <Button>TunneledKeyPress</Button>
 5       <Button>ButtonMouseUpEvent</Button>
 6       <Button>KeyPressEvents</Button>
 7       <Button>OnlyNumbers</Button>
 8       <Button>KeyModifiers</Button>
 9       <Button>Focus</Button>
10       <Button>MousePosition</Button>
11       <Button>DragAndDrop</Button>
12     </StackPanel>    
13 </Grid>

事件处理程序如下:

 1         private void ButtonClick(object sender, RoutedEventArgs e)
 2         {            
 3             //获取当前的Button
 4             Button cmd = (Button)e.OriginalSource;
 5             //根据当前的Button创建一个Window窗体的实例
 6             Type type = this.GetType();
 7             Assembly assembly = type.Assembly;                       
 8             Window win = (Window)assembly.CreateInstance(type.Namespace + "." + cmd.Content);
 9             //显示窗体
10             win.ShowDialog();
11         }

2.wpf中的逻辑树(LogicalTree)和可视树(VisualTree)的区别:LogicalTree的叶子结点是构成用户界面的控件,而VisualTree要连控件中的细微结构也算上。比如TextBlock与Label,其实TextBlock是个轻量型的文本显示框,Label的内部结构中也包含一个TextBlock。
下面区分一下路由事件中的:sender、e.Source、e.OriginalSource,Source事件源激发(raise)的事件在不使用路由事件的话sender跟source是同一对象。首先,路由事件是在VisualTree上传递,RoutedEventArgs有两个属性Source和OriginalSource,这两个属性都表示路由事件传递的起点(即事件消息的源头),只不过Source表示LogicalTree上的消息源头,而OriginalSource则表示VisualTree上的源头。

 

转载于:https://www.cnblogs.com/Seek-logic/p/3413795.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值