C# Windows Cef 框架如何用 WPF 原生控件?

119 天前
 yueji
公司用 C# 开发 Windows 端的软件.
因为一开始定了前后端这样的结构去开发.所以采用了 C# + Cef 框架.
但是现在软件端需要实时渲染图片和视频.CEF HTML 的性能在这块表现很拉.
测试过原生 WPF 的控件渲染性能表现很好.
------
如何在 C# Cef 框架内,部分使用 WPF 控件混合开发呢?
求有熟悉的讲一下..
1090 次点击
所在节点    程序员
7 条回复
nikenidage1
119 天前
这个。。。cef 就是内嵌个 chrome 啊,你都不如用 webview
考虑下推倒重来吧
yueji
119 天前
@nikenidage1 推倒重来太费事了.如果能在 cef 里用 wpf 原生控件就完美解决了.
yueji
119 天前
@nikenidage1 之前就是用的 Webview2.
但是 Webview2 在某些用户的电脑上,直接白屏初始化失败.极少,但是会存在.无解.
且为了支持 WIN7.所以切到了 cef.
lujiaxing
119 天前
不是, CEF 是能独立存在的么? 它总有个宿主吧? 不是 WinForms 就是 WPF 啊!! 你要单独搞一个界面显示 WPF 的图表那你就单独建窗体呀! 跟 CEF 有什么关系呢?? 你们是用 CEFSharp 还是 chromiumfx ??

但无论如何这些都不是单独存在的, 都是要有宿主的...
clorischan
119 天前
没用过 Cef,
但是应该可以在 HTML 里放一个空白元素.
获取并持续监测这个元素的在 Cef 内的坐标, 并转换为相对 WPF MainWindow 的坐标.
然后自定义一个 UserControl 用来展示你需要高性能渲染的内容,
再根据上面获取的坐标, 放在 Cef 控件上层覆盖住空白 HTML 元素.
adenlin
118 天前
意思是在 webview 里面使用 wpf 控件么?那基本上不太可能
osr 理论上可以做到,但是既然你问出这个问题了那估计你们大概率掌握不了这方面的技术...
crazytudou
118 天前
//注入对象给 html 调用
var obj = new JsEvent(System.Threading.SynchronizationContext.Current);
webBrowser.JavascriptObjectRepository.Register("wform", obj, isAsync: false, options: BindingOptions.DefaultBinder);
public class JsEvent
{
private System.Threading.SynchronizationContext context;
public JsEvent(System.Threading.SynchronizationContext context)
{
this.context = context;
}
//给 html 调用
public void testmsg(string type)
{
//
}
}

前端这么调用(js)
wform.testmsg("test");

你都用 cef 了,winform 和 wpf 应该都没啥区别吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1008250

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX