关于wpf窗体中Allowtransparent和WindowsFormsHost的纠纷

  最近有个项目需要在wpf中浏览pdf文档,所以就采用了Adobe Reader 的com组件(该组件只能用在winform中,幸好wpf里可以通过WindowsFormsHost寄宿winform程序),用着感觉还不错,能满足这个项目的需要。正当我窃喜的时候,在一次调整界面样式后,突然发现pdf文档不显示了。当时以为又是上次的自适应问题,就不慌不忙的按照老套路去解决,结果。。。废了半天劲都没有找到原因,我只好去请教部门的大牛了,通过一番努力,基本上确认了是因为样式的问题引起的。然后就是一番体力活,由于最近添加的样式比较多,没办法,只有一个一个的去排除。杀死弄多脑细胞后,终于找到罪魁祸首Allowtransparent。

  通过网上的一番寻找,才知道很多通过WindowsFormsHost寄宿的程序都存在这个问题。找到一个还不错的解决方案

http://blogs.msdn.com/b/changov/archive/2009/01/19/webbrowser-control-on-transparent-wpf-window.aspx

    第一次写这个。。。写的不好的,凑合着看吧。

转载于:https://www.cnblogs.com/action98/p/3479780.html

Windows Forms (WinForms) 应用程序嵌入 WPF 窗体需要一些额外步骤,因为WinFormsWPF是两个独立的框架。以下是一个简单的步骤说明: 1. **添加引用**:首先,在WinForms项目右键单击“References”,然后选择“Add Reference”。在弹出的对话框里,找到并勾选“PresentationFramework”(如果它不在可用的列表里,可能需要安装.net Framework 4.5 或更高版本)。 2. **创建WPF窗体**:在WinForms项目新建一个WPF窗体,例如命名为`WpfForm.xaml.cs`。这将生成一个WPF窗体文件和对应的后台代码。 3. **加载WPF窗体**:在WinForms上添加一个用户控件或者通过其他方式(如Panel或Window)来承载WPF窗体。例如,你可以使用`InteropServices`库的`CreateObject`函数动态创建一个WPF窗口实例: ```csharp using System.Windows.Forms; using System.Runtime.InteropServices; private void ShowWpfFormButton_Click(object sender, EventArgs e) { // 调整WPF窗体的构造函数以接受适当的参数,如果有的话 string wpfWindowName = "YourWpfFormName"; object wpfInstance = Activator.CreateInstance(Type.GetTypeFromProgID($"WPFNamespace.{wpfWindowName}")); using (var window = new WindowInteropHelper(wpfInstance as Window)) { window.Show(); } } ``` 4. **处理窗体关闭事件**:记得在WPF窗体处理Closing事件,以便在用户关闭时正确地关闭嵌入的WPF窗体。 注意:这种方法不是推荐的最佳实践,因为它涉及到COM interop,可能会导致性能和兼容性问题。通常更推荐的是使用Xceed或其他第三方控件(如Prism)来实现跨框架通信,或者考虑直接重构成统一的UI框架(如使用UWP或WPF)。如果你只是临时需要嵌套展示,可以考虑使用第三方库简化过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值