Winform窗口里的嵌入WPF的UserControl,关闭Winform父窗体的方法

本文介绍了一种在Windows Presentation Foundation (WPF) 应用中解决控件残留影像(鬼影)的方法。通过使用事件传递机制,而不是直接在UserControl中关闭Form,避免了第三方控件导致的问题,并提供了销毁特定对象来解决该问题的有效方案。

可以在form_load事件里把this传给UserControl,然后在usercontrol里调用form的各种方法,不过这种做法不太好,耦合性较高。标准做法是用事件传递

UserControl里加如下代码: 

public delegate void FormCloseEventHandler(object sender, EventArgs e);
public event FormCloseEventHandler FormClose;
private void button_quit_Click(object sender, EventArgs e)
{
if (this.FormClose != null)
{
FormClose(this, new EventArgs());
}
}

 


在Form里添加如下代码: 
form_load事件里:

this.userControl.FormClose += new UserControl.FormCloseEventHandler(this.userControl_FormClose); //不明白为什么是用类方法而非对象方法?

然后用这个方法不好使,还是出现我之前的鬼影问题

        private void userControl_FormClose(object sender, EventArgs e)
{
this.Close();
}

改成用这个方法, 把elementHost1这个对象给销毁掉,这样似乎就好了, 鬼影的问题是在用了第三方的WpfToolkit之中的DataGrid后出现的,如果用.NET4.0里面的DataGrid就没有问题。 虽然麻烦点,但是也算是个收获。

  private void UserControl_FormClose(object sender, EventArgs e)        {            this.elementHost1.Dispose();            this.Close();        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值