如何使用 C# 在 WPF 中开发类似 Google Chrome 浏览器的应用程序

Posted

技术标签:

【中文标题】如何使用 C# 在 WPF 中开发类似 Google Chrome 浏览器的应用程序【英文标题】:How to develop an application like Google Chrome browser in WPF using C# 【发布时间】:2011-05-06 13:18:49 【问题描述】:
I am trying to develop an windows application like Google chrome Browser in WPF

使用 C#。我在制作自己的自定义窗口并将选项卡放置在该窗口的标题位置时遇到问题。 请建议我如何去做,有什么工具吗?

请指导我............

更新:

您好朋友感谢您的积极响应,我也关注了您提供的链接和您告诉的方式,但我仍然对开发应用程序有疑问,请给我更多想法,我可以使用 Google Chrome 开发此应用程序,例如控制。我想给我的应用程序像 Google Chrome 一样的外观......

【问题讨论】:

Chrome Style C# Applications?的可能重复 【参考方案1】:

谷歌浏览器本质上是自定义绘制其窗口的非客户区,以删除它认为多余的东西,比如标题栏。这就是它获取选项卡以替换窗口标题栏的方式,就像 Microsoft Office 将其“珍珠”和快速访问工具栏放置在文档窗口的标题区域中的方式一样。

要在 WPF 中做类似的事情,您可能会发现这篇文章很有用:Link

请记住,每当您重新实现标准 Windows 镶边时,您都必须处理 Windows 通常对您透明的一堆东西,例如调整大小、最小化、最大化、移动和关闭窗口。

值得考虑的是,Google Chrome 和 Microsoft Office 应用程序(以及其他应用程序)的行为会有所不同,具体取决于 Aero Glass 和桌面窗口管理器 (DWM) 是否存在/启用。当这些东西丢失时,您将不得不确保您的应用程序优雅地降级。我建议您在投入所有时间和精力在您的应用程序中执行此类操作之前,请确保您确实可以为用户的必要性和利益提出令人信服的理由。

【讨论】:

【参考方案2】:

我刚刚为 WPF 完成了一个类似于 Google Chrome 的选项卡控件。您可以在https://github.com/realistschuckle/wpfchrometabs 找到该项目,并在

上发布描述它的博客文章 Google Chrome-Like WPF Tab Control ChromeTabControl and Visual Children in WPF WPF Chrome Tabs Functioning

希望有帮助!

【讨论】:

亲爱的,它真的是一个很好的实现。在此应用程序中需要添加更多功能,例如在最大化窗口时使用选项卡调整的标题栏区域在窗口大小内超过选项卡数量时,箭头标记会出现在窗口的两侧,目前它在此应用程序中受到限制 喜欢这些选项卡,是否可以让它像 chrome 一样工作,这样您就可以关闭一个选项卡并形成一个单独的窗口,或者添加一个选项卡并删除窗口? @SharpUrBrain 我不知道 wpfchrometabs 是否是可用于生产的小部件。真的,只是爱的劳动。因此,没有得到它需要的关注。 @Kelly 我已经查看了该功能,但当时(或现在,不幸的是)没有时间提供它。因为事实证明它不仅仅是 WPF。它仍然需要 Win32y 的东西。 :(【参考方案3】:

Chrome 似乎在标题栏区域的有限区域内绘制其标签。当打开足够多的选项卡时,现有选项卡控件的宽度会减小,以便为新选项卡腾出空间。

我建议您采用类似的策略,将选项卡绘制成大小合适的矩形,该矩形不与标题按钮(最小化、最大化关闭)相交,并在区域变满时减小现有选项卡标题的宽度

[更新 1]

虽然我没有看到您的代码,但我建议发生这种情况,因为选项卡标题(显示在标题栏区域中的部分)和选项卡页(覆盖大部分屏幕的部分)是相同的一部分控件和被绘制为一个单元,因此当您尝试在区域中绘制标题时,选项卡内容也会重新绘制。

如果是这种情况,那么您需要将选项卡标题和内容页绘制为单独的控件,并在选项卡中维护一些状态,以指示在选择选项卡时哪个选项卡页应该变得可见。

【讨论】:

感谢 Cripledsmurf 的想法,我已经尝试过了,但是当我为标题栏区域分配一个有限区域时,整个选项卡控件都会受到影响 更新了我的答案,以演示使用标题重绘选项卡内容的可能原因和解决方案

以上是关于如何使用 C# 在 WPF 中开发类似 Google Chrome 浏览器的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中正确使用 WPF 绘制图表

如何在功能区窗口wpf c#中显示状态栏

用C#开发一个winform应用程序,需要一个富文本的编辑器,类似QQ聊天对话框里的功能,只要实现文本功能即可

如何使用 c# WPF 打开 chm 文件中的特定页面

在 C# WPF 中恢复下载

如何在 c# wpf 中一次加载/保存多个文件? [关闭]