当前位置:   article > 正文

WPF中使用cefsharp

cefsharp 软键盘 wpf
原文: WPF中使用cefsharp

新入职一家公司,由写服务端接口变成了软硬件通信、服务器、客户端、C/S、B/S乱七八糟各种打杂。首先接收一个WPF项目,因为不熟WPF,再加上前端我也不熟,我打算使用类似Webapp的方式改造一下,驱使我这样改造的原因是----我心里其实是期待着老板能看在我很忙很累的份上开开恩,招个前端妹子来。

WPF自己的webbrowser控件使用起来经常会js出错,看网上说可以修改注册表提高wpf默认使用的ie浏览器版本,最后决定使用cefsharp。

包管理器下载安装了cefsharp.wpf,没注意版本。

编译报错,提示需要.net 4.5.2以上版本,当前程序使用的是.net 4.0,编译器为vs2013。

工程右键->属性->目标框架,下拉最高只有.net 4.5.1,下载.net 4.5.2 Developer Pack安装。

准备工作结束,直接上代码

准备html

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <link href="css/bootstrap.min.css?v=3.4.0" rel="stylesheet">
  5. <script language="JavaScript" type="text/javascript">
  6. function Selec()
  7. {
  8. bound.MyMethod();
  9. }
  10. </script>
  11. </head>
  12. <body oncontextmenu='return false' onselectstart='return false'>
  13. <input type="text" class="form-control"> <span class="help-block m-b-none">部门列表</span>
  14. <input type="submit" value="保存" onclick="Selec()">
  15. </body>
  16. </html>


xaml布局文件不需要改动,相应cs文件

在构造函数中加入

  1. //var browser = new CefSharp.Wpf.ChromiumWebBrowser();
  2. this.Content = browser;
  3. browser.Address = @"c:/html/Department.html";//文件路径
  4. browser.RegisterJsObject("bound", new BoundObject(), new CefSharp.BindingOptions { CamelCaseJavascriptNames = false });//次函数有对应异步方法(RegisterAsyncJsObject),区别和使用场景没仔细看


在定义一个类供js调用的c#方法
  1. public class BoundObject
  2.         {
  3.             public void MyMethod()
  4.             {
  5.                 MessageBox.Show("success");
  6.             }
}
 
  

 new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }参数区分大小写。 
  

好了,启动点击保存,弹出了了对话框。

还可以在xaml中使用

  1. xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
  2. d:DesignHeight="900" d:DesignWidth="1240">
  3. <Grid>
  4. <cefSharp:ChromiumWebBrowser Name="mychrome" Height="900" Width="1240"/>
  5. </Grid>
对应cs文件中作相应更改

  1. var browser = new CefSharp.Wpf.ChromiumWebBrowser();
  2. mychrome = browser;
  3. browser.Address = CGlobal.InstallPath + "html/Department.html";
  4. browser.RegisterAsyncJsObject("bound", new BoundObject(), new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); //Standard object rego

完善:

禁用右键 方法1

cs文件中加入

 browser.MenuHandler = new MenuHandler();
MenuHandler继承自接口IContextMenuHandler

  1. public class MenuHandler : CefSharp.IContextMenuHandler
  2. {
  3. public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
  4. {
  5. model.Clear();
  6. }
  7. public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
  8. {
  9. return false;
  10. }
  11. public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
  12. {
  13. }
  14. public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
  15. {
  16. return false;
  17. }
  18. }

方法2:修改HTML文件

<body  oncontextmenu='return false'>

禁止鼠标选中:

<body oncontextmenu='return false' onselectstart='return false'>


详情参考:https://github.com/cefsharp/CefSharp/wiki



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/257990
推荐阅读
相关标签
  

闽ICP备14008679号