C#所有WPF控件都使用Windows窗体中的公共事件

时间:2018-01-17 14:06:59

标签: c# winforms wpf-controls

我已经创建了一个这样的自定义WPF控件:

Custom WPF Button

我将此WPF控件放在我的Form1(Windows窗体)中,并为其编写了一个事件MouseEnter。我期望这里是获取WPF控件内的按钮名称。我在Form1中只使用了1个WPF控件。但我在Form1中有24个WPF控件。我使用 foreach 遍历所有 ElementHost (WPF控件)并将每个 ElementHost 的子项转换为WPF控件。我有一个问题是将ElementHost转换为WPF控件。

这是我的代码:

   public Form1()
        {
            InitializeComponent();
            foreach (ElementHost c in this.Controls)
            {        

                     TP1WPFControls.TP1CustomButton bt = c.Child as TP1CustomButton;

                    bt.bt.MouseEnter += Bt_MouseEnter;    
                    bt.bt.MouseLeave += Bt_MouseLeave;
            }

            //TP1WPFControls.TP1CustomButton btnCustom = elementHost1.Child as TP1CustomButton;
            //btnCustom.bt.Click += Bt_Click;
            //btnCustom.bt.MouseEnter += Bt_MouseEnter; ;
            //btnCustom.bt.MouseLeave += Bt_MouseLeave; ;

        }

这是我在Form1中显示WPF控件的图片: enter image description here

希望每个人都能为我提供解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

您需要遍历表单控件,但并非所有这些都是元素主机:

每个Windows窗体控件都基于System.Windows.Forms.Control,包括ElementHost。所以,在循环中,你试图强制转换。如果它不为null,您知道它是一个ElementHost,那么您可以在ElementHost上执行代码。

function getMonthlyTotalsByResource_(query) {

  var allRecordsQuery = app.models.Allocations.newQuery();
  allRecordsQuery.filters.Approved._equals = true;
  allRecordsQuery.filters.Resource.Manager.ManagerName._equals = 
  query.parameters.ManagerName;

  var allRecords = allRecordsQuery.run();

答案 1 :(得分:0)

非常感谢@ Ctznkane525。我试图将MouseLeave和MouseEnter事件中的发送者转换为WPF自定义控件中每个控件的类型,并且它已经工作了!因为我的TPCustomButton只是一个WPF控件,所以我必须为每个上面的事件转换每个控件。

我已经编辑了我的答案以获取完整信息:

 public Form1()
        {
            InitializeComponent();
            foreach (Control c in this.Controls)
            {
                ElementHost e = c as ElementHost;
                if (e != null)
                {

                    TP1WPFControls.TP1CustomButton btWPF = e.Child as TP1CustomButton;
                    if (btWPF != null)
                    {

                        //bt.bt.MouseLeave += Bt_MouseLeave;
                        //bt.lbl.MouseLeave += Lbl_MouseLeave;
                        btWPF.MouseLeave += Bt_MouseLeave;
                    }
                }
            }


        }
   private void Bt_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            TP1CustomButton btCustom = sender as TP1CustomButton;


            brushcolor = new brushColor(mediaColor.FromRgb(221, 247, 190));
            btCustom.bt.Background = brushcolor;
            btCustom.lbl.Background = brushcolor;

        }