WPF中使用cefsharp

简介: 原文:WPF中使用cefsharp 新入职一家公司,由写服务端接口变成了软硬件通信、服务器、客户端、C/S、B/S乱七八糟各种打杂。
原文: 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

<html>
<head>
    <meta charset="utf-8">
    <link href="css/bootstrap.min.css?v=3.4.0" rel="stylesheet">

    <script language="JavaScript" type="text/javascript">
        function Selec()
        {
            bound.MyMethod();
        }
    </script>
</head>
<body  oncontextmenu='return false' onselectstart='return false'>

    <input type="text" class="form-control"> <span class="help-block m-b-none">部门列表</span>
            <input type="submit" value="保存" onclick="Selec()">
</body>
</html>  


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

在构造函数中加入

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


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

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

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

还可以在xaml中使用

             xmlns:cefSharp="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
             d:DesignHeight="900" d:DesignWidth="1240">
    <Grid>
        <cefSharp:ChromiumWebBrowser Name="mychrome" Height="900" Width="1240"/>

    </Grid>
对应cs文件中作相应更改

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

完善:

禁用右键 方法1

cs文件中加入

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

        public class MenuHandler : CefSharp.IContextMenuHandler
        {
            public void OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
            {
                model.Clear();
            }
            public bool OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
            {
                return false;
            }
            public void OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
            {
                
            }
            public bool RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
            {
                return false;
            }
        }

方法2:修改HTML文件

<body  oncontextmenu='return false'>

禁止鼠标选中:

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


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



目录
相关文章
|
C# 图形学 数据格式
WPF中的3D Wireframe
原文:WPF中的3D Wireframe WPF不支持画三维线,但开发人员提供了ScreenSpaceLines3D 类用于实现这个功能。
1290 0
|
数据建模 C#
WPF InkCanvas 毛笔效果
原文:WPF InkCanvas 毛笔效果 1、先来看看InkCanvas的一般用法:                                                                                 2、自定义InkCanvas,实现毛笔效果...
1197 0
|
C# 前端开发
WPF 小技巧
原文:WPF 小技巧 在使用mvvm模式开发时,对于Command的绑定是一件很伤脑筋的事情,尽管有强大的Blend类库支持: xmlns:Custom="http://www.galasoft.ch/mvvmlight"xmlns:i="http://schemas.
750 0
|
C#
使用WPF实现3D场景[二]
原文:使用WPF实现3D场景[二] 在上一篇的文章里我们知道如何构造一个简单的三维场景,这次的课程我将和大家一起来研究如何用代码,完成对建立好了的三维场景的观察。
1082 0
|
C#
浅谈WPF中的PreviewTextInput
原文:浅谈WPF中的PreviewTextInput     今天在使用TextBox的TextInput事件的时候,发现无论如何都不能触发该事件,然后百思不得其解,最后在MSDN上找到了答案:TextInput 事件可能已被标记为由复合控件的内部实现进行处理。
1136 0
|
C#
浅谈WPF的VisualBrush
原文:浅谈WPF的VisualBrush     首先看看VisualBrush的解释,msdn上面的解释是使用 Visual 绘制区域,那么我们再来看看什么是Visual呢?官方的解释是:获取或设置画笔的内容,Visual 是直接继承自DependencyObject,UIElement也是直接继...
1894 0
|
JavaScript C#
wpf CefSharp 与 js交互
原文:wpf CefSharp 与 js交互 通过 NuGet 获取 CefSharp.WpF 组件。  xmlns:cefSharp="clr-namespace:CefSharp.
3835 0
|
C#
CefSharp For WPF基本使用
原文:CefSharp For WPF基本使用 Nuget引用 CefSharp.Wpf CefSharp.Common cef.redist.x64 cef.redist.x86 直接搜索安装CefSharp.
4262 0
|
C# UED
WPF 使用DMSkin for WPF 快速搭建漂亮的WPF程序
原文:WPF 使用DMSkin for WPF 快速搭建漂亮的WPF程序 DMSkin-for-WPF是一个基于WPF的.Net WPF开源界面库,实现了无边框的WPF开发方案,内置部分控件模板. 你可以参照模板自行修改完善。
1997 0
|
C# 索引
WPF MeshGeometry3D
原文:WPF MeshGeometry3D 说说 MeshGeometry3D 里 常用的 四个属性。 先看看 MSDN 的 简介 先说说 Positions,介绍说 是顶点位置的集合,什么意思,看张图片。
866 0