在winforms中处理WPF用户控件事件

本文关键字:用户 控件 事件 WPF 处理 winforms | 更新日期: 2023-09-27 18:05:02

我在winform中托管一个WPF用户控件。我在WPF用户控制(UserControl1)中使用WPF控制扩展器。当我展开或折叠扩展器时,我的主窗体应该得到通知。如何做到这一点?

我尝试了以下选项:

  • 在usercontrol1中声明了一个委托和事件,并试图在mainform中订阅-没有帮助
  • 在mainform中使用childchanged事件

WPF用户控制名- usercontrol1主表格名称-表格1

this.elementHost1.ChildChanged += new System.EventHandler<System.Windows.Forms.Integration.ChildChangedEventArgs>(this.elementHost1_ChildChanged);//form1 designer

        private void elementHost1_ChildChanged(object sender, ChildChangedEventArgs e)
        {
            var ctr = (elementHost1.Child as UserControl1);
            if (ctr == null)
                return;
            ctr.isCollapsed+=new UserControl1.expandedDel(ctr_isCollapsed);
        }
    void ctr_isCollapsed(object sender, System.Windows.RoutedEventArgs e)
        {
            throw new NotImplementedException();
        } 

在winforms中处理WPF用户控件事件

WPF usercontrol Winforms互操作-在Winforms中处理WPF事件

要求:WPF usercontrol(UserControl1)包含Expander(expander1), Expander包含3个单选按钮和WPF用户控件托管在winform(Form1)当usercontrol主表单中的单选按钮发生变化时,应该收到通知,并根据选择在主表单中弹出一些控件

在usercontrol1.xaml.cs

代码:

    public delegate void ucRadioButtonHandler(object sender, **ucButtonEventArgs** e);
    public event ucRadioButtonHandler onRadioButtonClick;
    private void radioButton1_Checked(object sender, RoutedEventArgs e)
    {
        if (onRadioButtonClick != null)
        {
            onRadioButtonClick(sender, new ucButtonEventArgs());
        }
    }

ucButtonEventArgs是在同一个usercontrol. example .cs中定义的类

public partial class ucButtonEventArgs : EventArgs
{
    public ucButtonEventArgs()
    {
    }
}

现在在MainForm Form1

public Form1()
        {
            InitializeComponent(); 
            userControl11.onRadioButtonClick += new           WpfControlLibrary1.UserControl1.ucRadioButtonHandler(userControl11_onRadioButtonClick);
        }
 void userControl11_onRadioButtonClick(object sender, WpfControlLibrary1.ucButtonEventArgs e)
        {
            System.Windows.Controls.RadioButton rb = (System.Windows.Controls.RadioButton)sender;
            MessageBox.Show(rb.Content + " Selected!!!!!!!!");
        }