• WPF 附加事件


        在WPF中有许多控件有他们自己的特殊的事件。按钮就是一个例子——它添加了 Click 事件,而其他任何类都没有定义该事件。

        这回导致两难的境地。假设在 StackPanel 面板中包装了一堆按钮,并且希望在一个事件处理程序中处理所有这些按钮的单击事件。粗略的方法是将每个按钮 Click 事件都注册到同一个事件处理方法中。但是 Click 事件支持事件冒泡,从而提供了更好的一种选择。可以通过处理更高层次的元素的 Click 事件(如包含按钮的 StackPanel 面板)来处理所有的按钮单击事件。

        这里会遇到一个问题,在StackPanel面板中并没有Click事件,正如上所说“按钮就是一个例子——它添加了 Click 事件,而其他任何类都没有定义该事件。”,所以 XAML 解析器会解释成一个错误。解决方案是以“类名.事件名”的形式使用不同的关联事件语法。下面是示例:

            <StackPanel Name="panel1" Button.Click="StackPanel_Click_1"  Margin="5">
                <Button Name="cmd1" Tag="1">Command 1</Button>
                <Button Name="cmd2" Tag="2">Command 2</Button>
                <Button Name="cmd3" Tag="3">Command 3</Button>
            </StackPanel>

        现在事件处理程序就可以接收到 StackPanel 面板中包含的所有按钮单击事件了。

        也可以在代码中关联附加事件,但是需要使用 UIElement.AddHandler() 方法,而不能使用 += 运算符语法。下面是一个示例(该示例假设 StackPanle 面板已经被命名为 pnlButtons ):

    pnlButtons.AddHandler(Button.Click, new RoutedEventHandler(StackPanel_Click_1));

        在 StackPanel_Click_1 事件处理方法中进行处理程序。

    下面是一个完整的例子:

    XAML

    <Window x:Class="_1016_AppendEvent.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
            <StackPanel Name="panel1" Button.Click="StackPanel_Click_1"  Margin="5">
                <Button Name="cmd1" Tag="1">Command 1</Button>
                <Button Name="cmd2" Tag="2">Command 2</Button>
                <Button Name="cmd3" Tag="3">Command 3</Button>
            </StackPanel>
    </Window>

    C#:

            private void StackPanel_Click_1(object sender, RoutedEventArgs e)
            {
                MessageBox.Show(e.Source.ToString());
            }

    源码下载:http://files.cnblogs.com/andrew-blog/1016_AppendEvent.rar

    开发工具:VS2012

    参考:http://www.wxzzz.com/?id=129

  • 相关阅读:
    洛谷 P6622
    洛谷 P6619
    LOJ 3188
    CF::Gym 102174G
    eJOI2017~2019
    洛谷 P6313
    洛谷 P6305
    JSOI2020 酱油记
    洛谷 P6234
    CodeForces 1334F
  • 原文地址:https://www.cnblogs.com/andrew-blog/p/WPF_AppendEvent.html
Copyright © 2020-2023  润新知