Extensions in UWP Community Toolkit - WebViewExtensions
概述
UWP Community Toolkit Extensions 中有一个为 WebView 提供的扩展 - WebViewExtensions,本篇我们结合代码详细讲解 WebView Extensions 的实现。
WebView Extensions 允许使用附加属性,在 XAML 中指定 WebView 的目标地址或目标网页内容,关于这一扩展,官方示例应用中并没有对应示例,我们实现一个简单的示例截图:

Doc: https://docs.microsoft.com/zh-cn/windows/uwpcommunitytoolkit/extensions/webviewextensions
Namespace: Microsoft.Toolkit.Uwp.UI.Extensions; Nuget: Microsoft.Toolkit.Uwp.UI;
开发过程
代码分析
我们先来看一下 WebViewExtensions 的类结构:

其中 Webview.cs 和 WebView.Properties.cs 类已被标记为 Obsolete,被 WebViewExtensions.cs 替代。
WebViewExtensions.cs
首先来看类中定义的几个附加属性:
- Content - WebView 的目标网页内容,类型为 string,变化时触发 OnContentChanged 事件;
- ContentUri - WebView 的目标网页地址,类型为 Uri,变化时触发 OnContentUriChanged 事件;
接下来看看这两个事件的处理逻辑:
1. OnContentChanged(d, e)
这个方法很简单,就是读取变化后的 string,使用 WebView 的 NavigateToString 方法赋值;需要注意的是,这里的 content 并不一定是一个有效的 html 网页,也可以是一段普通的字符串,Webview 也会以默认的字体样式来显示这段字符串;
private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Windows.UI.Xaml.Controls.WebView wv = d as Windows.UI.Xaml.Controls.WebView;
var content = e.NewValue as string;
if (string.IsNullOrEmpty(content))
{
return;
}
wv?.NavigateToString(content);
}
2. OnContentUriChanged(d, e)
这个方法的实现也很简单,读取并把内容转为 Uri 类型,如果有效则跳转到对应的 Uri 网站;这里要求传入的值一定是格式正确的网址,虽然不一定是可用的网址,不然会造成 crash;
private static void OnContentUriChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Windows.UI.Xaml.Controls.WebView wv = d as Windows.UI.Xaml.Controls.WebView;
var uri = e.NewValue as Uri;
if (uri == null)
{
return;
}
wv?.Navigate(uri);
}
调用示例
我们让 Webview 绑定 TextBlock 的 Text 作为 ContentUri,可以看到 WebView 正确跳转到了指定网址;
<TextBlock Text="http://www.cnblogs.com/shaomeng/" x:Name="uri"/>
<WebView Grid.Row="1" extensions:WebView.ContentUri="{Binding Text, ElementName=uri}"/>

总结
到这里我们就把 UWP Community Toolkit Extensions 中的 WebViewExtensions 的源代码实现过程和简单的调用示例讲解完成了,希望能对大家更好的理解和使用这个扩展有所帮助。欢迎大家多多交流,谢谢!
最后,再跟大家安利一下 UWPCommunityToolkit 的官方微博:https://weibo.com/u/6506046490, 大家可以通过微博关注最新动态。
衷心感谢 UWPCommunityToolkit 的作者们杰出的工作,Thank you so much, UWPCommunityToolkit authors!!!
Extensions in UWP Community Toolkit - WebViewExtensions的更多相关文章
- Extensions in UWP Community Toolkit - Overview
概述 UWP Community Toolkit 中有一个 Extensions 的集合,它们可以帮助开发者实现很多基础功能,省去自己造轮子的过程,本篇我们先来看一下 Extensions 的功能都 ...
- Extensions in UWP Community Toolkit - FrameworkElement Extensions
概述 UWP Community Toolkit Extensions 中有一个为FrameworkElement 提供的扩展 - FrameworkElement Extensions,本篇我们结合 ...
- Extensions in UWP Community Toolkit - Mouse Cursor
概述 UWP Community Toolkit Extensions 中有一个为 Mouse 提供的扩展 - Mouse Cursor Extensions,本篇我们结合代码详细讲解 Mouse C ...
- Extensions in UWP Community Toolkit - SurfaceDialTextbox
概述 UWP Community Toolkit Extensions 中有一个为TextBox 提供的 SurfaceDial 扩展 - SurfaceDialTextbox,本篇我们结合代码详细讲 ...
- Extensions in UWP Community Toolkit - ViewExtensions
概述 UWP Community Toolkit Extensions 中有一个为 View 提供的扩展 - View Extensions,本篇我们结合代码详细讲解 View Extensions ...
- Extensions in UWP Community Toolkit - Visual Extensions
概述 UWP Community Toolkit Extensions 中有一个为可视元素提供的扩展 - VisualExtensions,本篇我们结合代码详细讲解 VisualExtensions ...
- Extensions in UWP Community Toolkit - ListViewExtensions
概述 UWP Community Toolkit Extensions 中有一个为 ListView 提供的扩展 - ListViewExtensions,本篇我们结合代码详细讲解 ListView ...
- New UWP Community Toolkit
概述 UWP Community Toolkit 是一个 UWP App 自定义控件.应用服务和帮助方法的集合,能够很大程度的简化和指引开发者的开发工作,相信广大 UWPer 并不陌生. 下面是截取自 ...
- Animations in UWP Community Toolkit - Overview
概述 UWP Community Toolkit 中有一个 Animations 的集合,它们可以帮助开发者实现很多的动画,本篇我们先来看一下 Animations 的功能都有哪些,再后面会针对每一 ...
随机推荐
- 笔记:Maven 聚合和继承
聚合模块 我们希望一次构建两个或更多项目,而不是到每个模块的目录下分别执行mvn命令,Maven 聚合这一特性就是为该需求服务的, 为了使用聚合,我们必须创建一个聚合模块,通过该模块与其他项目聚合,并 ...
- 什么是DOM,DOM level 1\2\3 的区别是什么
DOM 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.Document Object Model的历史可以追溯至1990年 ...
- 基于Ubuntu的LNMP环境搭建
装备的工具 Ubuntu16.04 , Xshell 使用Xshell链接到Ubuntu 使用xshell链接Ubuntu不是必须的,只是为了操作的方便,同时默认是你的Ubuntu已经安装好了 在Ub ...
- Java TimSort算法 源码 笔记
本来准备看Java容器源码的.但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了.Arrays类没有什么架构与难点,但Arrays涉及到的两个排序算法似乎很有意思.那顺便 ...
- java大数(BigInteger)
JAVA之BigInteger 用Java来处理高精度问题,相信对很多ACMer来说都是一件很happy的事,简单易懂.用Java刷了一些题,感觉Java还不错,在处理高精度和进制转换中,调用库函数的 ...
- opencv配置
1.安装opecv库 从官网http://opencv.org/下载OpenCV windows版 运行之后 2.配置环境变量 64位系统,可以将32位和64位两个都添加上,免得以后编译不同程序再来配 ...
- sys用户密码丢失找回密码的步骤和命令
假设你的sys用户密码丢失,写出找回密码的步骤和命令? 1.确认哪个数据库实例的sys用户密码丢失:(例:数据库实例为orclA) 2.进入数据库实例的目录中找到PWDorclA.ora文件:(例目录 ...
- Python中的PYTHONPATH环境变量
PYTHONPATH是Python中一个重要的环境变量,用于在导入模块的时候搜索路径.可以通过如下方式访问: >>> import sys >>> sys.path ...
- Beta冲刺第六天
一.昨天的困难 没有困难. 二.今天进度 1.林洋洋:更新申请ip为域名,去除druid数据源统计 2.黄腾达:协作详情中添加成员对话框优化 3.张合胜:修复侧栏菜单mini状态下不能显示问题 三.明 ...
- 201621123057 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...