WindowsFormsHost控件

2023-11-15

WPF和WinForms是两个不同的UI框架,都是由Microsoft创建的。 WPF是WinForms的一个更现代的替代品,WinForms是第一个.NET UI框架。 为了在两者之间轻松过渡,Microsoft确保WinForms控件仍然可以在WPF应用程序中使用。 这是通过WindowsFormsHost完成的,我们将在本文中讨论。

要通过WindowsFormsHost使用WinForms中的控件,需要在应用程序中添加对以下程序集的引用:

  • WindowsFormsIntegration
  • System.Windows.Forms

在Visual Studio中,通过右键单击项目中的“引用”节点并选择“添加引用”来完成此操作:

在弹出的对话框中,选择“程序集”,然后勾选我们需要添加的两个程序集:

使用WinForms WebBrowser控件

在上一篇文章中,我们使用WPF WebBrowser控件来创建一个小型Web浏览器。 但是,如该文章所述,与WinForms版本相比,WPF WebBrowser控件有点受限。 关于使用WinForms版本可以轻松完成的事情有很多例子,这些版本要么更难,要么无法用WPF版本实现。

 

Make correction

一个小例子是DocumentTitle属性和相应的DocumentTitleChanged事件,这可以轻松获取和更新窗口的标题以匹配当前网页的标题。 我们在的WPF应用程序中用

<Window x:Class="WpfTutorialSamples.Misc_controls.WindowsFormsHostSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        Title="WindowsFormsHostSample" Height="350" Width="450">
    <Grid>
        <WindowsFormsHost Name="wfhSample">
            <WindowsFormsHost.Child>
                <wf:WebBrowser DocumentTitleChanged="wbWinForms_DocumentTitleChanged" />
            </WindowsFormsHost.Child>
        </WindowsFormsHost>
    </Grid>
</Window>
using System;
using System.Windows;

namespace WpfTutorialSamples.Misc_controls
{
	public partial class WindowsFormsHostSample : Window
	{
		public WindowsFormsHostSample()
		{
			InitializeComponent();
			(wfhSample.Child as System.Windows.Forms.WebBrowser).Navigate("http://www.wpf-tutorial.com");
		}

		private void wbWinForms_DocumentTitleChanged(object sender, EventArgs e)
		{
			this.Title = (sender as System.Windows.Forms.WebBrowser).DocumentTitle;
		}
	}
}

特别注意我们在窗口添加WinForms命名空间这行,以便我们可以从中引用控件:

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

这将允许我们使用wf:前缀引用WinForms控件。

您可以看到,WindowsFormsHost使用起来相当简单。 它有一个Child属性,你可以在其中定义一个WinForms控件,就像WPF Window只保存一个根控件一样。 如果在WindowsFormsHost中需要来自WinForms的更多控件,可以使用WinForms中的Panel控件或任何其他容器控件。

如上所述,WinForms WebBrowser控件使用wf前缀引用System.Windows.Forms程序集。

后台代码中,我们在构造时调用Navigate,在启动时有一个可见的网页而不是空白。 然后我们处理DocumentTitleChanged事件,在该事件中,我们根据WebBrowser控件的当前DocumentTitle值更新Window的Title属性。

恭喜,您现在拥有一个包含WinForms WebBrowser控件的WPF应用程序。

小结

正如您所看到的,在WPF应用程序中使用WinForms控件非常简单,但问题是:这是一个好主意吗?

Make correction

通常,您可能希望避免它。 有许多问题可能会或可能不会影响您的应用程序(这些MSDN文章中描述了很多问题:http://msdn.microsoft.com/en-us/library/aa970911%28v=VS.100%29.aspx),但更严重的问题是,在.NET框架的未来版本中可能不支持这种UI框架混合。

最后,决定权在你 - 你真的需要WinForms控件吗?还是一个能正常工作的WPF替代?

原文地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WindowsFormsHost控件 的相关文章

随机推荐

  • 简单使用Linux

    1 创建虚拟机及安装操作系统 一 打开下载好的VMware Workstation软件 二 点击 创建新的虚拟机 三 选择需要创建的虚拟机 建议选自定义 再点击下一步 四 选择系统默认兼容性并选择稍后安装 再点击下一步 五 选择Linux系
  • 互联网晚报

    腾讯回应高考生喊话马化腾 2023高考首日 在杭州十四中考点 第一科语文科目考试还没有结束 一名男生就走出了考场 面对记者采访 男生喊话马化腾 腾讯能不能把QQ空间改回老版 新版太难用了 对此 腾讯QQ在其官方微博回应称 腾讯非常重视其建议
  • golang GET http、https、代理方式

    package utils import crypto tls encoding json io ioutil log net http net url time func GET url string reply interface er
  • CentOS 构建yum本地源

    不管是为了安全起见 还是为了方便 构建本地源对于维护工作肯定会提供一些便利 1 将事先准备好的镜像文件 如 CentOS 7 x86 64 DVD 1908 iso 加载至服务器CD DVD 或虚拟机CD DVD 并将镜像文件挂载至指定的目
  • java &= ~_Java基础一

    一 1 对象 其实对象就是类的实例化 如创建一个类 车 创建一个类的对象 小汽车 而且有颜色 大小 车速等等 2 类 例如车有 小汽车 大卡车 三轮车 四驱车等等 但要用一个词概括它们 则可以统称为车 现在这个 车 就相当于 类 3 方法
  • 1489. 田忌赛马 (贪心,区间dp)

    题目 田忌赛马的故事 田忌每次输一局要付200元 赢一局获得200元 平局获得0元 问 田忌和齐王都有n匹马的情况下 最多可以获得多少元 1489 田忌赛马 AcWing题库 由于田忌赛马的故事背景 我们很快就能够想到合理的贪心策略 上等马
  • mimikatz的使用

    目录 1 远程连接使用 2 本地使用 注意 1 版本问题 2 运行权限 3 抓取范围 4 抓不到密码的解决方法 mimikatz下载链接 mimikatz是个好东西 它的功能很多 最重要的是能从 lsass exe进程中获取windows的
  • 第几个幸运数

    暴力 include
  • Vue中的验证登录状态

    Vue项目中实现用户登录及token验证 先说一下我的实现步骤 使用easy mock新建登录接口 模拟用户数据 使用axios请求登录接口 匹配账号和密码 账号密码验证后 拿到token 将token存储到sessionStorage中
  • git撤回某次commit

    假设我们已经将本地代码提交到远程分分支上 但是我们想撤回某一个commit或者是对某一个文件的修改进行撤回等操作 我们可以使用以下这几种方式 一 git reset git reset 回滚到某次提交 git reset mixed 此次提
  • 数据库系统原理------ER图转化成关系模式

    E R图转换 E R图是由实体 实体的属性和实体之间的联系三个要素组成的 将E R图转换为关系模型实际上就是要将实体 实体的属性和实体之间的联系转化为关系模式 实体集向关系模式的转换 一般转换遵循的原则 实体集的转换规则 一个实体型转换为一
  • 特网科技云服务器适合安装那些操作系统

    通过云主机 择带有预装控制面板的模板 只需单击几下即可安装 可用的操作系统模板 我们在管理虚拟服务器时使用的主要操作系统是Ubuntu Debian Windows CentOS Kali Astra Orel CentOS Communi
  • unity+vuforia+二维码识别

    Easy Code Scanner 下载地址 Easy Code Scanner v2 3 本文转载自http blog csdn net puremilk684 article details 51479245 经本人验证 可以在安卓平台
  • .NET使用MQTT通信实例

    最近项目里面需要用到MQTT 刚开始听到这个词一脸茫然 不知道是什么 最后通过自己百度整理一点资料 希望最大家有帮助 在这里需要引用MQTTnet 可在解决方案在右键单击 选择 管理解决方案的 NuGet 程序包 在 浏览 选项卡下面搜索
  • AttributeError: module ‘tensorflow‘ has no attribute ‘Session‘

    代码错误 Traceback most recent call last File D PyCharm PythonProject DRL Networking master DRL Networking master IPDPS2020
  • Real-Time Rendering——9.11 Wave Optics BRDF Models波动光学BRDF模型

    The models we have discussed in the last few sections rely on geometrical optics which treats light as propagating in ra
  • 在Linux中安装nodejs(未编译版安装方法)

    技术背景 Linux安装 nodejs 总的来说 有两种方法 第一种是安装未编译版本 然后自行编译在安装 第二种是直接安装编译版本 推荐 但作为笔记 我两种都得写 那种适合自己 自行挑选 废话不多说 我们直接上步骤 第一步 执行 wget
  • vue.js—定义全局变量、函数

    废话不多说 直接上代码 以便以后学习查看 一 全局变量 原理 1 单独新建一个全局变量模块文件 模块中定义一些变量初始状态 用export default 暴露出去 2 在main js中引入 并通过Vue prototype挂载到vue实
  • Fragment生命周期

    http blog csdn net forever crying article details 8238863 官网帮助文档链接 http developer Android com guide components fragments
  • WindowsFormsHost控件

    WPF和WinForms是两个不同的UI框架 都是由Microsoft创建的 WPF是WinForms的一个更现代的替代品 WinForms是第一个 NET UI框架 为了在两者之间轻松过渡 Microsoft确保WinForms控件仍然可