博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF:与windows窗体进行交互
阅读量:5770 次
发布时间:2019-06-18

本文共 1548 字,大约阅读时间需要 5 分钟。

源自《WPF编程宝典》总结小记。

混合窗口和窗体

  1. 显示模态窗口和窗体

从WPF应用程序中显示模态窗体很简单,如WPF中:

Form1 frm=new Form1();if(frm.ShowDialog()==System.Windows.Form.DialogResult.OK){    MessageBox.Show("You clicked OK in a Windows Forms from.");    }

在windows窗体应用程序显示WPF的方法:

Window1 win=new Window1;if(Win.ShowDailog()==ture){  MessageBox.Show("You clicked OK in a WPF window.");}
  1. 显示非模态窗口和窗体

在Windows窗体中非模态显示WPF,需如下:

引入WindowsFormsIntegration.dll程序集

Window1 win=new Window();ElementHost.EnableModelessKeyboardInterop(win);win.show();

在WPF应用程序中显示非模态的Windows窗体,需:

只需要在显示任何窗体之前调用(一般启动时)调用

WindowsFormsHost.EnableWindowsFormsInterop();Form1 frm=new Form1();frm.Show();

PS:一个问题:在WPF中显示Form窗体时,Form会使用旧的XP的控件风格,如想支持新WPF风格,如下

解决办法:只需在显示所有Windows窗体内容之前调用EnableVisualStyle()方法。
public partial class App:System.Windows.Appliation{    protected override void OnStartup(StartupEventArgs e)    {        //Raises the Startup event.        base.OnStartup(e);        System.Windows.Forms.Application.EnableVisualStyles();    }}

创建具有混合内容的窗口

  1. WPF和Windows窗体“空域”--不允许的情况

“空域规则”:指示WPF和Windows窗体必须总是使用它们自己的不同窗口区域,即它们专门管理的区域

具体就是:如果在WPF内容之上放置Windows窗体内容,将发现Windows窗体内容总在上面。
在Windows窗体之上放置WPF内容,根据Z索引显示。ps:Windows窗体的每个控件为单独窗口,WPF为一个根窗口。
clipboard.png

  1. 在WPF中驻留Windows窗体控件

代码如下:

  • 使用WPF和Windows窗体用户控件
  • 在Windows窗体中驻留WPF控件
  • Win32互操作

ps:可以使用System.Windows.Interop.HwndHost类在WPF中驻留Win32.WindowsFormsHost继承于HwndHost

HwndSource是HwndHost的补充,它可将任何WPF可视化对象或元素封装到hwnd中。同时HwndHost.RootVisual属性设置为顶级元素,然后将HwndSource放置到窗口中。

转载地址:http://zysux.baihongyu.com/

你可能感兴趣的文章
CSS盒模型
查看>>
ng2路由延时加载模块
查看>>
使用GitHub的十个最佳实践
查看>>
全面了解大数据“三驾马车”的开源实现
查看>>
脱离“体验”和“安全”谈盈利的游戏运营 都是耍流氓
查看>>
慎用!BLEU评价NLP文本输出质量存在严重问题
查看>>
Facebook Sonar:一款可视化及交互式移动应用调试工具
查看>>
基于干净语言和好奇心的敏捷指导
查看>>
Node.js 2017企业用户调查结果发布
查看>>
“软”苹果水逆的一周:杂志服务崩溃,新机型遭泄露,芯片首架离职
查看>>
JAVA的优势就是劣势啊!
查看>>
IEEE802.11数据帧在Linux上的抓取
查看>>
使用if语句编写Shell脚本
查看>>
ELK实战之logstash部署及基本语法
查看>>
帧中继环境下ospf的使用(点到点模式)
查看>>
BeanShell变量和方法的作用域
查看>>
LINUX下防恶意扫描软件PortSentry
查看>>
由数据库对sql的执行说JDBC的Statement和PreparedStatement
查看>>
如何使用SMTPDiag 工具
查看>>
springmvc+swagger2
查看>>