zoukankan      html  css  js  c++  java
  • WPF路由事件

    与传统的winform不同,WPF的事件的发送者与事件的响应着并没有直接的关系,当然而这也可以是同一个对象。

    事件仅仅是沿着逻辑树一直向上转发,如果有对象对事件进行响应,则会出发相应的动作。

    举例来说。

    新建一个窗口

        <Grid Background="#FFB6B600" MouseUp="Grid_MouseUp_1" Name="g1">
            <Grid Margin="20" Background="Red" MouseUp="Grid_MouseUp_1" Name="g2">
                <Grid  Margin="20" Background="#FF074AD8" MouseUp="Grid_MouseUp_1" Name="g3">
                    <Button x:Name="btn1" Content="Button" HorizontalAlignment="Left" Margin="182,103,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
    
    
                </Grid>
            </Grid>
        </Grid>

    我们先不管中间的button,可以看到每一个grid都实现了Grid_MouseUp_1方法

            private void Grid_MouseUp_1(object sender, MouseButtonEventArgs e)
            {
                Grid g = sender as Grid;
                MessageBox.Show(g.Name);
                
            }

    这个时候,你单击其中一个gird,会发现每一个gird都会响应这个单击,因为每一个事件处理完成该事件以后,就会继续转发该事件,所以事件会沿着视图树传播到每一个grid对象中。视图树可以在文档大纲中看到。

    刚才我们说了,事件的发送者和响应着是没有任何直接关系的。那么也就是说响应button的click事件的不一定是button 可以是任何对象。

    我们添加如下代码

            public MainWindow()
            {
                InitializeComponent();
                g1.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click_1));
            }
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                FrameworkElement f = sender as FrameworkElement;
                MessageBox.Show(f.Name);
            }

    点击按钮以后,会将事件的的响应对象的名字打印出来。

    这个时候会看到两个messagebox,一个提示btn1,就是按钮本身的响应,另外一个是g1就是grid的响应。

    每一个对象都有一个eventhandler,需要响应那个事件,仅仅需要将对应的事件添加进去就可以了。

    如g1添加对按钮点击事件的响应。

    g1.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click_1));
  • 相关阅读:
    php通过某个日期段的周几,获取选中周几对应的日期
    thinkphp 使用paginate分页搜索带参数
    php小程序登录时解密getUserInfo获取openId和unionId等敏感信息
    微信小程序使用wxParse,解决图片显示路径问题
    php对二维数据排序
    微信小程序下拉框之二维数组或对象
    php获取指定月份月初和月末的时间戳
    WPF中实现自定义虚拟容器(实现VirtualizingPanel)
    SQL Server数据库ROW_NUMBER()函数使用详解
    WPF后台设置xaml控件的样式System.Windows.Style
  • 原文地址:https://www.cnblogs.com/HighFun/p/2952822.html
Copyright © 2011-2022 走看看