原文:Windows Phone开发(21):做一个简单的绘图板

其实我们今天要说的就是一个控件——InkPresenter,这个控件并不是十分强大,没办法和WPF中的InkCanvas相比,估计在实际开发中也很少可能会用到它,不过,我们还是来了解一下吧,毕竟用起来也不难。

使用该控件没有什么技术含量,注意一下以下几点就是了:

1、必须明确指定InkPresenter的宽度和高度,也就是不能使用自动值和Margin,不然不能收集墨迹,除非里面有子元素;

2、要收集墨迹,要设置Clip属性;

3、可以使用DrawingAttributes类设置墨迹的大小和颜色。

该控件不能像WPF那样自动实现收集墨迹的功能,也就是说只能是我们自己写代码了。

    <Grid>
<InkPresenter x:Name="MyPresenter"
HorizontalAlignment="Left"
VerticalAlignment="Top"
MouseLeftButtonDown="MyPresenter_MouseLeftButtonDown"
LostMouseCapture="MyPresenter_LostMouseCapture"
MouseMove="MyPresenter_MouseMove"
Background="Transparent"
Opacity="1" Width="480" Height="750" />
</Grid>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
// 引入以下命名空间。
using System.Windows.Ink; namespace InkPresentSample
{
public partial class MainPage : PhoneApplicationPage
{
Stroke CurrentStroke = null;
// 构造函数
public MainPage()
{
InitializeComponent(); // 设置剪辑,以便收集墨迹
RectangleGeometry rg = new RectangleGeometry();
// 为了使范围准确,应使用控件的最终呈现高度。
rg.Rect = new Rect(0, 0, MyPresenter.ActualWidth, MyPresenter.ActualHeight);
MyPresenter.Clip = rg;
} private void MyPresenter_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
// 当我们点击时获捉鼠标光标
MyPresenter.CaptureMouse();
// 收集当前的光标所在的位置的点
StylusPointCollection sc = new StylusPointCollection();
sc.Add(e.StylusDevice.GetStylusPoints(MyPresenter));
CurrentStroke = new Stroke(sc);
// 设置笔触的颜色,大小
CurrentStroke.DrawingAttributes.Color = Colors.Yellow;
CurrentStroke.DrawingAttributes.Width = 8;
CurrentStroke.DrawingAttributes.Height = 8;
// 把新的笔触添加到集合中
MyPresenter.Strokes.Add(CurrentStroke);
} private void MyPresenter_LostMouseCapture(object sender, MouseEventArgs e)
{
// 当释放鼠标时,也同时释放笔触变量的引用
CurrentStroke = null;
} private void MyPresenter_MouseMove(object sender, MouseEventArgs e)
{
if (CurrentStroke != null)
{
// 每移动一次鼠标,都收集对应的点。
CurrentStroke.StylusPoints.Add(e.StylusDevice.GetStylusPoints(MyPresenter));
}
}
}
}

Windows Phone开发(21):做一个简单的绘图板的更多相关文章

  1. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  2. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  4. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截

    程序猿修仙之路--数据结构之你是否真的懂数组?   数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少. ...

  5. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  6. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  7. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  8. 【 D3.js 入门系列 — 3 】 做一个简单的图表!

    图1. 柱形图 1. 柱形图 前几章的例子,都是对文字进行处理.本章中将用 D3 做一个简单的柱形图.制作柱形图有很多种方法,比如用 HTML 的 <div> 标签,或在 SVG 上绘制 ...

  9. [macOS开发.NET Core] 一个简单的WEB程序

    上一篇咱们提到了在macOS下选进行开发. 咱们已经把工具准备完成了. 现在咱们做一个简单的DEMO 创建WEB程序  之前咱们已经创建过WEB程序,并且成功的运行过数据 现在咱们创建一个页面,并显 ...

随机推荐

  1. 14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间

    14.5.7 Storing InnoDB Undo Logs in Separate Tablespaces 存储InnoDB Undo logs 到单独的表空间 在MySQL 5.6.3,你可以存 ...

  2. [C#基础] 继承

    虚方法和覆写方法 虚方法可以使基类的引用访问"升至"派生类中 可以使用基类引用调用派生类的方法,只需满足下面的条件 派生类的方法和基类的方法有相同的签名和返回类型 基类的方法使用v ...

  3. struts2错误验证

    在登陆的时候一般要用错误验证功能.效果如图: 在action层的写法: this.addActionError("username或password错误"); 在jsp页面上取值: ...

  4. Types of Windows

    The Window's Real Estate   Application's Instance   A window is referred to as parent when it can be ...

  5. 菜鸟玩云计算之十一:Hadoop 手动安装指南

    Hadoop 手动安装指南 cheungmine 2013-4 本文用于指导在Windows7,VMWare上安装Ubuntu, Java, Hadoop, HBase实验环境. 本指南用于实验的软件 ...

  6. 求第i个小的元素 时间复杂度O(n)

    #include<iostream> //求第i个小的元素 时间复杂度O(n) #include<cstdlib> #include<ctime> using na ...

  7. EA强大功能之代码凝视

    前面讲了EA怎样方便我们生成代码,这次讲一下,怎样生成具体的凝视. 1.文件表头凝视 (1)点击工具----选项 在常规项里改动作者: 在代码project中改动代码project的默认语言. (2) ...

  8. 2014最新SSH框架面试题大收集

    (1)Hibernate工作原理及为什么要用? 原理:  1.读取并解析配置文件  2.读取并解析映射信息,创建SessionFactory  3.打开Sesssion  4.创建事务Transati ...

  9. VS快捷键教程

    删除或剪切一行(Ctrl + X) 不须要选择不论什么文本, 用来剪切一行, 最经常使用来删除一行.  删除一行也能用 Shift+Delete 格式化整个文档(Ctrl + K, Ctrl + D) ...

  10. 开玩笑Web它servlet(五岁以下儿童)---- 如何解决servlet线程安全问题

    servlet默认值是安全线的存在,但说白,servlet安全线实际上是一个多线程线程安全问题.因为servlet它正好是一个多线程的安全问题出现. 每次通过浏览器http同意提交请求,将一个实例se ...