<Window x:Class="WPF熊俊.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="306" Width="542" >
    <StackPanel Height="219" Name="stackPanel1" Width="335" Button.Click="Button_Click">
        <Button Content="Button" Height="23" Name="button1" Width="75" />
        <Button Content="Button" Height="23" Name="button2" Width="75" />
        <Button Content="Button" Height="23" Name="button3" Width="75" />
        <CheckBox Content="CheckBox" Height="16" Name="checkBox1" />
    </StackPanel>
</Windowprivate void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show((sender as FrameworkElement).Name);
    MessageBox.Show((e.Source as FrameworkElement).Name);
}
给StackPanel定义的附加事件是Button.Click="Button_Click",那应该只有Button的单击事件才会路由给StackPanel啊,为什么单击CheckBox也传递给StackPanel了??

解决方案 »

  1.   

    这么说吧,Button and CheckBox都继承及ButtonBase,而Click是ButtonBase里面的事件。你把CheckBox换成一个Image, 看还会不会触发。
      

  2.   

    checkbox是ButtonBase吧,会是button?
      

  3.   

    楼上已经解释的很清楚了。这个路由事件是:ButtonBase.ClickEvent我只想说两点:1.你应该去了解WPF的一些基础知识。
    2.不要太过迷信XAML语法,建议看看Code + Makeup
      

  4.   

    那楼上各位的意思是,写Button.Click和ButtonBase.Click没区别?我也是看到《WPF编程宝典》第112页上是这么说的哦
      

  5.   

    换成CheckBox.Click="Button_Click",button也能引发,哎,到底是怎么回事呢?
      

  6.   

    能写Button.Click只是微软的人性化设计。
    但是Button根本就没有Click这个路由事件。
      

  7.   

    如果连继承都不理解不了,这样只看WPF的书,对着例子敲有啥用.多去理解下基本知识吧。
      

  8.   

    我取消了XAML挂接,而是在代码中手动关联:
    stackPanel1.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click));结果,点击CheckBox,也还是引发了。
      

  9.   

    var flg = Button.ClickEvent == CheckBox.ClickEvent &&
              Button.ClickEvent == RadioButton.ClickEvent &&
              Button.ClickEvent == ButtonBase.ClickEvent;