在运行时将所有事件处理程序从一个控件复制到另一个控件

时间:2017-05-31 11:19:37

标签: c# wpf reflection

我正在尝试将每个事件处理程序从一个控件复制到另一个控件(相同类型)。 我发现有几个例子可以用Winform做,但没有用于WPF ...

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">

    <StackPanel x:Name="panel">
        <Button x:Name="btn1" 
                Content="Button 01"/>
    </StackPanel>
</Window>


using System;
using System.Windows;
using System.Windows.Controls;

namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            btn1.Click += (s, e) => Console.WriteLine("Button pressed");

            AddButton();
        }

        private void AddButton()
        {
            Button btn2 = new Button() { Content = "Button 02" };
            panel.Children.Add(btn2);

            // Copy all event handler from btn1 to btn2 ??
        }
    }
}

问题是我无法访问任何处理程序方法名称,因为我想从另一个类复制事件处理程序...

1 个答案:

答案 0 :(得分:3)

我终于找到了有效的here

以下是我正在使用的解决方案:

              postURL = "/cart/add.js";
          dataToPost = {quantity:1, id:ProdID};
          $.ajax
          ({
            type: "POST",
            url: postURL,
            data: dataToPost,
            dataType:'json',
            success: function(){
               $.ajax({
                type: 'GET',
                url: '/cart.js',
                dataType: 'json',
                contentType: "application/json",
                success: function(data) { 
                  cartLen = data.item_count;
                  cartPrice = ((data.total_price /100)*.9).toFixed(2);

                     $('#cartCount').html(cartLen);
                     $('#cartCountMobile').html(cartLen);
                     $('#cartPrice').html("("+"$"+cartPrice+")");
                     $('#cartPriceMobile').html("("+"$"+cartPrice+")");

                }
            });
            },
            error: function(e){
                console.log('ERROR! ', e);
            }
          });

有了这个,我将Click事件的处理程序和MouseEntered事件的处理程序分配给第二个按钮。