练手WPF(一)——模拟时钟与数字时钟的制作(中)
今天接着制作数字时钟
数字时钟主要用到Path控件,主要用于定义数字笔划的形状。
(1)添加一个DigitLine类
数字时钟的数字8由7笔组成,看如下定义的字段字符串数组PathDatas,每个string代表其中一笔。最后一个string是数字表的冒号。
/// <summary>
/// 数字表数字类
/// </summary>
public class DigitLine
{
// 数字7个笔划路径数据数组
string[] PathDatas = new string[]
{
"M3,0 L53,0 L38,15 L18,15 Z", // -
"M0,3 L15,18 L15,38 L0,53 Z", // |
"M41,18 L56,3 L56,53 L41,38 Z", // |
"M10,48.5 L18,41 L38,41 L46,48.5 L38,56 L18,56 Z", // -
"M0,44 L15,60 L15,80 L0,94 Z", // |
"M41,59 L56,44 L56,94 L41,79 Z", // |
"M18,82 L38,82 L53,97 L3,97 Z", // _
"M0,0 L15,0 L15,15 L0,15Z M0,40 L15,40 L15,55 L0,55 Z" // :
}; // 路径数组(公共)
public Path[] Path0_9 = new Path[];
public Path PathColon = new Path();
}
(2)设置0-9这10个数字的笔划,添加到上述类
/// <summary>
/// 根据digit设置(分配)数字路径数据
/// </summary>
/// <param name="digit">数字</param>
private void SetDigit(int digit)
{
StringBuilder sbData = new StringBuilder(); switch (digit)
{
case :
for (int i = ; i < ; i++)
{
if (i == )
continue;
sbData.Append(PathDatas[i]);
}
break;
case :
for (int i = ; i < ; i++)
{
if (i == || i == || i == || i == || i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break; case :
for (int i = ; i < ; i++)
{
if (i == || i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break;
case :
for (int i = ; i < ; i++)
{
if (i == || i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break;
case :
for (int i = ; i < ; i++)
{
if (i == || i == || i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break; case :
for (int i = ; i < ; i++)
{
if (i == || i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break; case :
for (int i = ; i < ; i++)
{
if (i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break; case :
for (int i = ; i < ; i++)
{
if (i == || i == || i == || i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break; case :
for (int i = ; i < ; i++)
{
sbData.Append(PathDatas[i]);
}
break;
case :
for (int i = ; i < ; i++)
{
if (i == )
{
continue;
}
sbData.Append(PathDatas[i]);
}
break; } Path0_9[digit].Data = Geometry.Parse(sbData.ToString());
}
除了数字8需要画出所有7笔外,其他数字都会少画相应的笔划,看一下for里的if就清楚了。
/// <summary>
/// 设置冒号
/// </summary>
/// <param name="color"></param>
private void SetColon(Brush color)
{
PathColon.Fill = color;
PathColon.Data = Geometry.Parse(PathDatas[]);
}
还有这冒号要定义。
(3)该类的构造方法
/// <summary>
/// 构造
/// </summary>
/// <param name="brush"></param>
public DigitLine(Brush brush)
{
// 初始化路径数组
for (int i=; i<; i++)
{
Path0_9[i] = new Path();
Path0_9[i].Fill = brush; SetDigit(i);
} SetColon(brush);
}
将定义好的0-9数字的形状分别保存在Path型字段数组变量Path0_9的Data中,待后调用。
(4)如果要设置倾斜数字,可以使用下面方法进行设置。
public void SetDigitSkewTransform(double angleX)
{
SkewTransform stf = new SkewTransform(angleX, ); for (int i=; i<; i++)
{
Path0_9[i].RenderTransform = stf;
}
} public void SetColonSkewTransform(double angleX)
{
SkewTransform stf = new SkewTransform(angleX, );
PathColon.RenderTransform = stf;
}
要设置X方向的倾斜角度,然后进行变换操作。
这个类就这样了,下一步就可以使用该类将相关的数字和冒号放入Canvas中显示出来了。
练手WPF(一)——模拟时钟与数字时钟的制作(中)的更多相关文章
- 练手WPF(一)——模拟时钟与数字时钟的制作(上)
一.Visual Studio创建一个WPF项目. 简单调整一下MainWindow.xaml文件.主要使用了两个Canvas控件,分别用于显示模拟和数字时钟,命名为AnalogCanvas.digi ...
- 练手WPF(一)——模拟时钟与数字时钟的制作(下)
继续数字时钟.上一篇写好了数字笔划专用的DigitLine类.现在是时候使用它了.下面对一些主要代码进行说明. 打开MainWindow.xaml.cs文件: (1)添加字段变量 // 数字时钟字段定 ...
- 练手WPF(三)——扫雷小游戏的简易实现(上)
一.创建项目1.创建WPF项目,设置初始化窗口大小(初级难度):高x宽为430x350.2.添加文件夹Images,并添加相关图片. 3.xaml中引入图片资源. <Window.Resourc ...
- 练手WPF(二)——2048游戏的简易实现(上)
1.创建游戏界面编辑MainWindow.xaml,修改代码如下: <Window.Resources> <Style TargetType="Label"> ...
- python3 练手实例5 做一个简单电子时钟
import time,sys,os while(1): t = time.strftime('%Y-%m-%d\n%H:%M:%S',time.localtime(time.time())) pri ...
- 练手WPF(三)——扫雷小游戏的简易实现(下)
十四.响应鼠标点击事件 (1)设置对应坐标位置为相应的前景状态 /// <summary> /// 设置单元格图样 /// </summary> /// <para ...
- 练手WPF(四)——贪吃蛇小游戏的简易实现(下)
八.生成新的单节蛇身我们这里先说说游戏小原理好了,游戏运行后,通过计时器事件不断生成新的单节蛇身类SnakeNode,添加到List中的0位置,原来的蛇头变成了第二节.该节新蛇头的坐标通过蛇头前进方向 ...
- 练手WPF(四)——贪吃蛇小游戏的简易实现(上)
一. 游戏界面首先,按照惯例,编辑MainWindow.xaml,先将游戏界面制作好.非常简单:(1)主游戏区依然使用我们熟悉的Canvas控件,大小为640X480像素,设定每小格子为20px,所以 ...
- 练手WPF(三)——扫雷小游戏的简易实现(中)
八.随机布雷 /// <summary> /// 随机布地雷 /// </summary> /// <param name="mineNum"> ...
随机推荐
- atom 在Ubuntu 18.04 上安装及基本使用
前记: Atom 是github专门为程序员推出的一个跨平台文本编辑器.具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言.它支持宏,自动完成分 ...
- C# 重置IE安全等级
打开IE设置-安全 dynamic shellObject = Interaction.CreateObject("WScript.Shell", ""); / ...
- 在nodejs中怎么使用redis缓存组件
redis量个强大的缓存组件,可以部署在windows和linux环境之上,它有五大存储结构,其中有一种为列表list,它可以实现quene和stack的功能,即队列和堆栈的功能. 当然使用先安装py ...
- IL指令列表
使用编译器可以将C#代码编译为中间语言(Intermediate Language,IL)代码,中间语言是一种平台无关的指令集,最终会由CLR将中间语言字节码转换为对应平台的机器码从而执行:阅读IL代 ...
- 解决vscode中golang插件依赖安装失败问题
vscode中安装ms-vscode.go插件后可以开启对go语言的支持,ms-vscode.go插件需要依赖一些工具,安装完成后提示 gocode go-outline go-symbols gur ...
- CSS3动画的使用
0921自我总结 CSS3动画的使用 一.动画的创建 @keyframes规则是创建动画 浏览器兼容 1.@keyframes myfirst 2.@-webkit-keyframes myfirst ...
- PHP制作的掷色子点数抽奖游戏实例
PHP制作的掷色子点数抽奖游戏实例,通过掷色子点数来达到抽奖的效果,为抽奖活动增添一些趣味性. 我们将在html页面中写下如下的html结构代码,.wrap用来放置色子和提示信息,#prize则是用来 ...
- CSS 让div,span等块级、非快级元素排列在同一行
让div,span等块级.非快级元素排列在同一行 by:授客 QQ:1033553122 例子:让两个div排列在同一行 给div添加float样式 <!DOCTYPE html> < ...
- 阅读SQL基础教程
这两天阅读SQL基础教程,目标是把SQL语法吃透,会写一些笔记.
- WebGL-3D地图大俯仰角的雾化处理
腾讯位置服务Javascript API GL版,是基于WebGL技术打造的地图API库,使得浏览器环境下也可实现APP端的应用体验,提供2D/3D模式,运行流畅.当前版本提供地图展示.标记.信息窗口 ...