练手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"> ...
随机推荐
- ansible+playbook 搭建lnmp环境
用三台机器 做ansible+playbook 搭建lnmp环境 IP分配 ansible 主机192.168.202.132 lnmp第一台主机 192.168.202.131 lnmp第一台主机 ...
- 用dotnet core搭建web服务器(三)ORM访问数据库
访问传统sql数据库,大家以前都是用sql语句去查询.这些年流行orm方法 ORM是对象关系映射的简拼,就是用一个对象(class)去表示数据的一行,用对象的成员去表述数据的列 dotnet 官方很早 ...
- ansible执行带有环境变量的脚本不生效
1背景 jenkins发布时,使用ansible执行远程主机上的启动tomcat脚本发现不生效,启动tomcat的脚本中有环境变量. ansible主机为:172.16.35.8 tomcat服务器为 ...
- IT兄弟连 HTML5教程 CSS3揭秘 CSS3属性5
9 透明属性 元素透明也是我们常用的样式,在CSS2中使用滤镜属性opacity实现透明效果.现在有了CSS3的rgba属性,就不用这么麻烦了,当然这也得要浏览器支持才行.通常我们定义颜色都是用十六 ...
- DNS解析服务结构图
1.DNS(domain name system) 域名 <==> IP地址 DNS解析过程:
- 【编译系统02】编译器 - 语义分析器(semantic)的简单设计思路(变量类与变量表)
当我们分析到 "int n;",说明其已经定义了一个变量,之后又遇到一个 "n=3",我们从哪里去找这个n并且赋值呢? 答案是:通过我们定义的 变量表(Tabl ...
- IDEA中新建SpringBoot项目时提示:Artifact contains illegal characters
场景 一步一步教你在IEDA中快速搭建SpringBoot项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87688277 ...
- Implement Property Value Validation in Code 在代码中实现属性值验证(XPO)
This lesson explains how to set rules for business classes and their properties. These rules are val ...
- 升鲜宝V2.0_杭州生鲜配送行业,再论B端生鲜配送企业管理软件的开发与实施的难点与行业痛点_15382353715_余东升
升鲜宝V2.0_杭州生鲜配送行业,再论B端生鲜配送企业管理软件的开发与实施的难点与行业痛点_15382353715_余东升 笔者简介:升鲜宝供应链管理软件平台创始人,14年软件从业经历,10多年深究生 ...
- MySQL基础之练习题
题目 现有班级.学生以及成绩三张表: 备注:表名称和字段名称可以参考表格内单词设置 根据表格信息,按要求完成下面SQL语句的编写: 1.使用SQL分别创建班级表.学生表以及成绩表的表结构,表内数据可以 ...