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控件 的相关文章

  • WPF 组合框如果只有 1 项则自动选择

    我有一个组合框 我绑定到一个可观察的集合 它会发生变化 根据选择的公司 并且大量公司将有一个帐户 项目 因此我想知道制作组合框的最佳方法是什么如果 ItemsSource 中只有 1 个项目 则设置 SelectedItem 否则将其保留为
  • WPF - 检测鼠标按下一段时间

    检测鼠标按钮何时在特定元素上按住特定时间段的最佳方法是什么 感谢您的提示 我创建了一个附加属性以避免任何代码隐藏 using System using System Windows using System Windows Threadin
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • 更改鼠标悬停时的矩形背景

    所以我有一个没有背景的矩形 当用户将鼠标悬停在其上时 我想给它一个背景渐变 然后当鼠标离开矩形时删除渐变 请有人发布所需的代码 并告诉我将其放在 cs xaml 文件中的位置吗 Thanks This
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • ListView ItemContainerStyle 模板

    我创建了用作 ListView 项目模板的样式 其中包含 CheckBox 和 TextBlock
  • 如何使 WPF 应用程序在 Web 浏览器上运行

    我们有一个用 WPF 编写的现有应用程序 我们正在寻找一种迁移它的方法 以便它可以在 Web 浏览器上运行 深入研究后 我们似乎需要找到一种将代码编译为 WebAssembly 的方法 但我不确定它对于现有的完全加载的 WPF 应用程序有多
  • CommandManager.InvalidateRequerySuggested 不会导致对 MVVM-Light 中的 CanExecute 进行重新查询

    我正在使用 MVVM Light RelayCommand private ICommand myRevertCmd public ICommand Revert get if myRevertCmd null myRevertCmd ne
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • WPF 绑定 CompositeCollection 中的 MenuItem 不起作用

    我在将命令绑定到复合集合中的菜单项时遇到问题 这MenuItem是其一部分ContextMenu这是定义在UserControl Resources 问题是新标签的绑定不起作用 当我将 MenuItem 放置在复合集合之外时 它将起作用 有
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • ScrollViewer 滚动条始终禁用

    我是 xaml 和 wpf 的新手 我正在尝试将一些用户控件从代码隐藏插入到容器中 我已阅读此博客文章MSDN http blogs msdn com b marcelolr archive 2009 06 09 stackpanel do
  • .NET / C# / WPF 项目的命名约定

    NET C WPF 项目广泛接受的命名约定是什么 Microsoft 有一篇关于命名约定的内容广泛的 MSDN 文章here http msdn microsoft com en us library ms229002 aspx
  • WPF控件默认大小

    为 wpf 应用程序定义自定义资源主题时 我可以设置宽度 高度等 如何找到这些属性的默认值 即框架中提供的控件中使用的值 WPF 控件通常不包含任何类型的默认大小 WPF 的主要功能点之一是 除非您指定大小 否则所有内容都会动态调整大小 如
  • WPF:通过拖放重新排序 WrapPanel 内容?

    我正在寻找一种通过拖放对 WPF WrapPanel 的内容 项目 重新排序的方法 我只想单击一个项目并将其拖动到新位置 据我了解 这是一项非常常见的任务 我想知道有人已经这样做了 或者知道如何实现此功能 我已经进行了谷歌搜索 但什么也没找
  • 强制 IDataErrorInfo 验证

    我在某个面板上有两个控件 文本框和组合框
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 将 BitmapImage 从 Resources.resx 分配给 Image.Source?

    我想分配一个BitmapImage从我的 Resources resx 到Image 之前我将 png 图像保存到 Resources resx 中 该图像现在位于 Resources logo png 中 在阅读了几篇 SO 帖子和其他文
  • WPF:如何避免图像超出 Canvas 的边界?

    我有一个画布作为图像查看器 它的背景用于放置图像 我想在其上面放置另一个图像 所以 场景是这样的

随机推荐

  • 简单使用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控件仍然可