title author date CreateTime categories
WPF 使用 Edge 浏览器
lindexi
2018-8-13 15:33:5 +0800
2018-06-01 17:45:34 +0800
WPF

本文告诉大家如何使用 Windows Community Toolkit 的新控件,在 WPF 使用 Edge 浏览器

首先需要通过 VisualStudio 创建 WPF 项目。因为 Microsoft.Toolkit.Win32.UI.Controls 库只支持 4.6.2 以上,所以需要选择框架大于 4.6.2

打开 Nuget 安装 Microsoft.Toolkit.Win32.UI.Controls ,需要同意许可

打开主页面,在 xaml 添加下面代码

 xmlns:wpf="clr-namespace:Microsoft.Toolkit.Win32.UI.Controls.WPF;assembly=Microsoft.Toolkit.Win32.UI.Controls" 
        <wpf:WebView x:Name="WebView"></wpf:WebView>

在代码跳转到我的博客

        public MainWindow()
{
InitializeComponent(); WebView.Navigate("https://lindexi.gitee.io");
}

运行一下软件

如果不想在 xaml 写任何的代码,也可以通过下面代码添加

        public MainWindow()
{
InitializeComponent(); var webView = new WebView();
webView.Navigate("https://lindexi.gitee.io");
Content = webView;
}

优点

  • 触摸非常流畅

  • 加载页面非常快

  • 缩放页面几乎不使用CPU

  • 对于很多图片的时候使用内存很小

  • 可以使用 RenderTransform 修改显示,但不是所有的变换都可以使用

  • 可以进行布局,如下图,使用Grid分开按钮

存在的问题

  • 吃掉了 Touch 事件、MouseDown事件,也就是吃掉了所有用户输入

  • 第一次加载无法覆盖控件大小,在修改窗口大小之后才可以

  • 设置 IsEnable 无作用

  • 设置 IsHitTestVisible 无作用,依然可以响应输入

  • 默认没有设置 IsManipulationEnable ,但是可以响应手势

  • 能够使用 snoop 在视觉树找到 WebView 但是没有看到 WebView 里面的元素

无法在 WebView 上面放控件

我尝试了下面的代码,虽然设计的界面可以看到按钮,但是运行界面没有按钮

   <Grid x:Name="Grid">
<wpf:WebView x:Name="WebView"> <wpf:WebView.RenderTransform>
<RotateTransform x:Name="BupeLesedaicee" Angle="10"></RotateTransform>
</wpf:WebView.RenderTransform>
</wpf:WebView>
<TextBlock Text="林德熙都比"></TextBlock>
<Button Content="确定"
Click="Button_OnClick"></Button>
</Grid>

但是运行的时候就看不到按钮了,所以存在层级问题,这个问题是在08年就有大神说到的问题。

大概就是如果同时有多个渲染,WPF 、 WinForms 如果两个绘制的矩形有重叠,那么重叠部分就不能正常使用。

无论在什么层级放 WebView ,他的层级都是窗口最高

这个问题参见:Mitigating Airspace Issues In WPF Applications – Presentation Source

一个解决方法是:chris84948/AirspaceFixer: AirspacePanel fixes all Airspace issues with WPF-hosted Winforms.

旋转

我尝试使用下面的代码让 WebView 旋转,但是设置值只能让他偏移

   <Grid x:Name="Grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="337*"/>
<ColumnDefinition Width="456*"/>
</Grid.ColumnDefinitions> <wpf:WebView x:Name="WebView" Grid.Column="0" > <wpf:WebView.RenderTransform>
<RotateTransform x:Name="BupeLesedaicee" Angle="10"></RotateTransform>
</wpf:WebView.RenderTransform>
</wpf:WebView>
<TextBlock Grid.Column="0" Text="lindexi" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<Button Content="确定"
Click="Button_OnClick" Grid.Column="1" Margin="10,10,10,10"></Button>
</Grid>

按钮点击的时候就添加旋转

        private void Button_OnClick(object sender, RoutedEventArgs e)
{
BupeLesedaicee.Angle += 5;
}

添加多个浏览器

如果在相同矩形区域添加多个浏览器,在逻辑树第一个浏览器显示在最前

我在代码打开了我的博客和黄腾霄博客,结果发现我的博客显示在前面

        <wpf:WebView x:Name="WebView" Grid.Column="0" >

            <wpf:WebView.RenderTransform>
<RotateTransform x:Name="BupeLesedaicee" Angle="10"></RotateTransform>
</wpf:WebView.RenderTransform>
</wpf:WebView>
<wpf:WebView Grid.Column="0" Source="https://huangtengxiao.gitee.io/"></wpf:WebView>

我尝试使用 Panel.ZIndex 但是无法修改顺序

最简单的方法是对比一下原来的浏览器和新的浏览器

    <Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="337*" />
<ColumnDefinition Width="456*" />
</Grid.ColumnDefinitions> <wpf:WebView x:Name="WebView" Grid.Column="0" Source="https://lindexi.gitee.io" /> <WebBrowser Grid.Column="1" Source="https://huangtengxiao.gitee.io/" />
</Grid>

可以看到新的浏览器还是比以前的好很多

参见:Windows Community Toolkit 3.0 新功能 在WinForms 和 WPF 使用 UWP 控件 - CSDN博客

Bringing a modern WebView to your .NET WinForms and WPF Apps - Microsoft Edge Dev BlogMicrosoft Edge Dev Blog

2018-8-13-WPF-使用-Edge-浏览器的更多相关文章

  1. WPF 使用 Edge 浏览器

    原文:WPF 使用 Edge 浏览器 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访 ...

  2. WPF系列教程——(三)使用Win10 Edge浏览器内核 - 简书

    原文:WPF系列教程--(三)使用Win10 Edge浏览器内核 - 简书 在需要显示一些 H5网站的时候自带的WebBrowser总是显示不了,WebBrowser使用的是IE内核,许多H5新特性都 ...

  3. Deepin V20.1 解决安装Edge浏览器后更新系统报错的方法

    问题描述:有些人在deepin系统上安装完edge浏览器后采用sudo apt update命令更新系统,却报出了错误,更新失败.原因是更新deepin系统的时候,最好把其它的源禁用了,不然会有各样的 ...

  4. 如何在Microsoft Edge浏览器中添加一个Hello World插件

    注:本文提到的代码示例下载地址> How to add a Hello World extension to Microsoft Edge Microsoft Edge 随着Win 10一起推出 ...

  5. 取消ie浏览器edge浏览器输入框右边的叉和眼睛

    在ie高版本浏览器和edge浏览器里type为text和password的input框在输入时右边会出现×和眼睛,如果需要清除,方法如下: 首先在页面头部声明兼容性模式 <meta http-e ...

  6. 如何创建一个Edge 浏览器扩展

    随着微软Windows 10 年度更新的发布,数次延宕的Edge 扩展功能终于得到了官方正式支持.我在我的另外一个博客上发布了如何创建一个Edge 浏览器扩展的博文,链接如下: https://blo ...

  7. edge 浏览器中数字显示为链接

    在win10 中的Edge浏览器中部分格式的数字显示链接.经过各种搜索找到一篇文章 How to remove phone number link on Iphone? ,通过这篇文章了解 edge ...

  8. 教你一招:Win10系统如何正确卸载edge浏览器?

    Edge浏览器作为Win10系统默认浏览器,尽管我们将其他浏览器设置为默认程序,但是有时候还是会自动弹出,非常的不爽,但是在控制面板中却又找不到卸载“Edge”浏览器的选项.下面小编就教大家卸载“Ed ...

  9. Windows 10 Build 14997中Edge浏览器已默认阻止Flash运行

    在上周末偷跑的 Windows 10 Build 14997 向我们传递了很多信息,新增了蓝光过滤器等功能,并有望装备在即将到来的 Creators Update 中.经过深入发掘,外媒发现新版系统中 ...

  10. js判断浏览器,包括Edge浏览器

    /* * 描述:判断浏览器信息 * 编写:LittleQiang_w * 日期:2016.1.5 * 版本:V1.1 */ //判断当前浏览类型 function BrowserType() { va ...

随机推荐

  1. 通过在__init__.py中定义__all__变量,来简化from*import*的书写

    下图是一个带被引入使用的包的结构,包名比较长,给书写from*import*带来很多麻烦 为了解决麻烦,在__init__.py编写了如下内容 from .httputil import HTTPUt ...

  2. 【JZOJ4835】【GDOI2017模拟10.31】量化交易

    题目描述 数据范围 解法 贪心: 从左往右枚举,设枚举到元素为x,并维护一个堆: 设此时堆顶元素为y, 如果x大于y,那么x可以与y产生差价,立即将差价贡献给答案. 如果y之前已经和其他元素z产生过差 ...

  3. time,datetime模块

    time模块 时间戳 返回1970年1月1日 00:00:00开始按秒计算时间偏移量 time_stamp = time.time() print(time_stamp,type(time_stamp ...

  4. python 异常处理技巧

  5. UVA_445:Marvelous Mazes

    Language:C++ 4.8.2 #include<stdio.h> #include<string.h> #include<ctype.h> int main ...

  6. 01docker简单使用和配置(容器、镜像)

    一:容器中运行简单应用程序 1:hello  world 使用docker可以在容器中运行应用程序,使用docker run命令即可.比如下面的命令: $ docker run ubuntu /bin ...

  7. linux下修改gcc编译器版本

    可以使用如下命令行来让 gcc 选择不同的 C++ 版本: g++ -std=c++11 main.cpp 在你的系统中,由于编译器或是编译器设定上的差别,操作也许有所不同.    

  8. filter: grayscale(100%)滤镜属性

    效果图: filter滤镜属性

  9. 2019年CPS-J复赛题解

    题目涉及算法: 数字游戏:字符串入门题: 公交换乘:模拟: 纪念品:完全背包: 数字游戏:广搜/最短路. 数字游戏 题目链接:https://www.luogu.com.cn/problem/P566 ...

  10. 很奇怪的问题(Chrome)

    <p>感觉这个问题跟Chrome浏览器本身的一些策略有关.</p> 在我写完登录页面后 准备美滋滋的登录验证下的时候,确一直卡在数据获取上了,查看NetWork,发现是Chro ...