从WPF开始,就有个InkCanvas控件,封装了数字墨迹处理相关的功能,Silverlight到Win 8 App,再到UWP应用,都有这个控件,所以,老周说了3688遍,凡是.net基础扎实者,必懂WPF,凡是WPF基础扎实者,必懂UWP。这叫一脉相承。

现在你明白为什么每次SDK发布后,老周不用学习就可以直接拿来用的原因了吧,因为老周认真学习过WPF呗,无他,如此而已。

Windows 10 一周年更新后,SDK也随即更新,预览版毕竟是未定型的,所以,在预览版阶段,老周并不打算写什么,现在已正式推送了,因此,可以写些什么了。

周年更新的其中一个玩意儿就是Windows Ink,这个工具内置在系统,方便涂鸦。

同时,Ink相关的功能也整合到 SDK 中,而且已经做好了封装,直接拿来就能用,功能齐全。不信?咱们试试。

新建UWP项目,然后项目模板会创建一个主页——MainPage.xaml,然后你输入以下XAML即可。

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}"/>
<InkCanvas Name="ink_cvs" Grid.Row="1" />
</Grid>

很简单,InkCanvas就不用多介绍了,它是一个面板,特点是你可以在它上面涂抹,就像大街上那些妖怪那样,把化妆品往脸上乱涂,涂得人不像人,鸡不像鸡。

InkToolBar呢是一个现成的工具栏,你可以在上面选择涂鸦的工具,比如圆珠笔、铅笔、橡皮擦、尺子等,老周记得,这些都是老周上幼儿园时的必备套装。唉,你想想,咱们那个时候,有个P手机电脑玩的,上学前玩泥人,上学后玩纸人,上课时玩橡皮擦,下课后玩粉笔擦。每次听到罗大佑的《童年》,都别有一番滋味,童年时光多么美好,一转眼,沧海已变成桑田,桑田又变成沧海,世事恒无常,且活且珍惜。

只要你声明一个InkToolBar对象,无需写任何代码,它就能用了。哦,别忘了关键一点,那就是,你得让InkToolBar找到InkCanvas实例,如此,这两位Ink君才能协同工作,InkToolBar是郎才,InkCanvas是女貌,正所谓:水爱花姣美,花爱水清明。

要让两位Ink君走到一起,需要一个媒介——对了,InkToolBar有个TargetInkCanvas属性,它用来指定相应的InkCanvas对象,记住了,这个属性一定要赋值,不然找不到伴,InkToolBar会殉情的,鸳鸯怎能失伴飞呢,是吧。

看到没,就是这么TMD简单,一个涂鸦程序就完成,别看只声明了两个控件,现在它完全可以工作了。当然,别急着运行,因为我们还需要指定InkCanvas面板支持哪些操作,如鼠标、触控笔、手触等。好,切换到代码视图,在页面类的构造函数中加入以下代码:

        public MainPage()
{
this.InitializeComponent(); this.ink_cvs.InkPresenter.InputDeviceTypes = Windows.UI.Core.CoreInputDeviceTypes.Mouse | Windows.UI.Core.CoreInputDeviceTypes.Pen | Windows.UI.Core.CoreInputDeviceTypes.Touch;
}

InputDeviceTypes属性指定墨迹面板支持哪些设备操作,这里我就干脆鼠、笔、指全用上。

注意,这些代码一定要写在InitializeComponent方法调用之后,别犯那些低级错误,因为InitializeComponent方法调用后,XAML定义的UI才完成初始化,不然,控件实例都是null,你访问个屁。

好了,现在OK了,运行一下吧。

是不是很是简单呢?那么,如果我只希望显示铅笔、橡皮擦两个按钮,而不需要其他按钮,那怎么做呢?没事,很简单,来,动手干一干。

首先,把InkToolBar的InitialControls属性改为None。

   <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}" InitialControls="None"/>

然后,在InkToolBar元素下面手动定义各个按钮。

        <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}" InitialControls="None">
<InkToolbarPencilButton/>
<InkToolbarEraserButton/>
</InkToolbar>

再次运行一下,看看效果。

好,现在简洁了不少。

InkToolBar还提供了 custom button,你可以自定义涂鸦按钮,以扩展其功能。比如,我添加一个按钮。

        <InkToolbar Name="ink_bar" TargetInkCanvas="{x:Bind ink_cvs}" InitialControls="None">
……
<InkToolbarCustomToolButton Click="OnClick">
<SymbolIcon Symbol="Folder" ToolTipService.ToolTip="sample" />
</InkToolbarCustomToolButton>
</InkToolbar>

得到以下视图。

好了,关于InkToolBar,就聊到这里吧。

示例代码下载地址

【Win 10 应用开发】InkToolBar——涂鸦如此简单的更多相关文章

  1. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  2. 【Win 10 应用开发】导入.pfx证书

    这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...

  3. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  4. 【Win 10应用开发】认识一下UAP项目

    Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...

  5. 【Win 10 应用开发】在代码中加载文本资源

    记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...

  6. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...

  7. 【Win 10应用开发】延迟共享

    延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...

  8. 【Win 10 应用开发】Toast通知激活应用——前台&后台

    老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...

  9. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

随机推荐

  1. Fis3的前端工程化之路[三大特性篇之声明依赖]

    Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...

  2. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  3. ABP文档 - 本地化

    文档目录 本节内容: 简介 应用语言 本地化源 XML文件 注册XML本地化源 JSOn文件 注册JSON本地化源 资源文件 自定义源 获取一个本地文本 在服务端 在MVc控制器里 在MVC视图里 在 ...

  4. MVC如何使用开源分页插件shenniu.pager.js

    最近比较忙,前期忙公司手机端接口项目,各种开发+调试+发布现在几乎上线无问题了:虽然公司项目忙不过在期间抽空做了两件个人觉得有意义的事情,一者使用aspnetcore开发了个人线上项目(要说线上其实只 ...

  5. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  6. ActiveRecord模式整理

    DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象 ...

  7. [转载]敏捷开发之Scrum扫盲篇

    现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP...      为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述S ...

  8. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  9. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...

  10. x01.os.23: 制作 linux LiveCD

    1.首先运行如下命令  sudo apt-get install wget bc build-essential gawk genisoimage 2.下载如下资源,make all 即可 http: ...