RoutedEvent

  <StackPanel>
            
            <StackPanel Background="Blue" Margin="3" x:Name="panel_Blue">
                
                <Button Margin="3" Content="Button A" x:Name="btn_B1" Click="btn_B_Click" />
                
                <Button Margin="3" Content="Button B" x:Name="btn_B2" Click="btn_B_Click" />
                
            </StackPanel>
            
            <StackPanel Background="Green" Margin="3" x:Name="panel_Green" ButtonBase.Click="panel_G_Click">
                
                <Button Margin="3" Content="Button A" x:Name="btn_G1" />
                
                <Button Margin="3" Content="Button B" x:Name="btn_G2" />
                
            </StackPanel>
            
            <StackPanel Background="Red" Margin="3" x:Name="panel_Red" ButtonBase.Click="panel_R_Click">
                
                <Button Margin="3" Content="Button A" x:Name="btn_R1" Click="btn_R1_Click" />
                
                <Button Margin="3" Content="Button B" x:Name="btn_R2" Click="btn_R2_Click" />
                
            </StackPanel>
            
        </StackPanel>

   private void btn_B_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(
               "Click Blue Panel Button !",
               "System Infomation",
               MessageBoxButton.OK,
               MessageBoxImage.Information);

            MessageBox.Show(
              string.Format("sender Type is {0}.", sender.GetType().Name));

            Button sourceButton = (Button)(sender);
            MessageBox.Show(
                string.Format("Source Button is {0} !", sourceButton.Name),
                "System Infomation",
                MessageBoxButton.OK,
                MessageBoxImage.Information);
        }

        private void panel_G_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(
                "Click Green Panel Button !",
                "System Infomation",
                MessageBoxButton.OK,
                MessageBoxImage.Information);

            MessageBox.Show(
                string.Format("sender Type is {0}.", sender.GetType().Name));

            MessageBox.Show(
               string.Format("e.Source Type is {0}.", e.Source.GetType().Name));

            Button sourceButton = (Button)(e.Source);
            MessageBox.Show(
                string.Format("Source Button is {0} !", sourceButton.Name),
                "System Infomation",
                MessageBoxButton.OK,
                MessageBoxImage.Information);
        }

        private void panel_R_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(
                "Click Red Panel Button !",
                "System Infomation",
               MessageBoxButton.OK,
               MessageBoxImage.Information);
        }

        private void btn_R1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(
               "Click Red Panel Button A !",
               "System Infomation",
               MessageBoxButton.OK,
               MessageBoxImage.Information);
        }

        private void btn_R2_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(
                "Click Red Panel Button B !",
               "System Infomation",
                MessageBoxButton.OK,
                MessageBoxImage.Information);

            e.Handled = true;
        }


1、在panel_Blue中定义的三个按钮的Click事件属于“类事件”,即在类型对象中声明事件的绑定。此时事件响应方法中的sender指的就是由哪个对象引发的事件



2、在panel_Green中定义ButtonBase.Click="xxx",将其容器内所有的ButtonBase类型及其子类型的事件,统一绑定到一个事件处理方法上,统一处理。此时事件响应方法中的sender指的是panel_Green对象,而e.Source指的是引发ButtonBase.Click的某个按钮


3、路由事件的处理模型常用的有两种:


冒泡事件:由子控件位次向父容器传递,大部分的路由事件都是冒泡事件
隧道事件:由父容器位次向其子容器、控件传递,一般PreXXX事件属性隧道事件
4、使用路由事件响应方法中的e.Handled = true;意味着此事件已经被处理,将不再传递,默认e.Handled的值为false,意味着此路由事件还未处理完整,事件将依据其模型继续向下处理(即执行其他的事件处理方法)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
System.InvalidOperationException HResult=0x80131509 Message=指定的元素已经是另一个元素的逻辑子元素。请先将其断开连接。 Source=PresentationFramework StackTrace: 在 System.Windows.FrameworkElement.ChangeLogicalParent(DependencyObject newParent) 在 System.Windows.FrameworkContentElement.AddLogicalChild(Object child) 在 System.Windows.LogicalTreeHelper.AddLogicalChild(DependencyObject parent, Object child) 在 System.Windows.Documents.TextContainer.InsertEmbeddedObjectInternal(TextPointer position, DependencyObject embeddedObject) 在 System.Windows.Documents.TextPointer.InsertUIElement(UIElement uiElement) 在 System.Windows.Documents.BlockUIContainer.set_Child(UIElement value) 在 System.Windows.Documents.BlockUIContainer..ctor(UIElement uiElement) 在 MdPass.UI.DrugGudiesForm.Print_Click(Object sender, MouseButtonEventArgs e) 在 D:\vs_work_space\kehuduan\MdPass\UI\DrugGudiesForm.xaml.cs 中: 第 313 行 在 System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) 在 System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) 在 System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) 在 System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) 在 System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent) 在 System.Windows.UIElement.OnMouseDownThunk(Object sender, MouseButtonEventArgs e) 在 System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) 在 System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) 在 System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs) 在 System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) 在 System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) 在 System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args) 在 System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted) 在 System.Windows.Input.InputManager.ProcessStagingArea() 在 System.Windows.Input.InputManager.ProcessInput(InputEventArgs input) 在 System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport) 在 System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel) 在 System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 在 System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 在 MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled) 在 MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o) 在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs) 在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler) 在 System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs) 在 MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 在 MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg) 在 System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame) 在 System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame) 在 System.Windows.Window.ShowHelper(Object booleanBox) 在 System.Windows.Window.Show() 在 System.Windows.Window.ShowDialog() 此异常最初是在此调用堆栈中引发的: [外部代码] MdPass.UI.DrugGudiesForm.Print_Click(object, System.Windows.Input.MouseButtonEventArgs) (位于 DrugGudiesForm.xaml.cs 中) [外部代码]
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值