先上图,WPF半透明风时钟,我的大爱啊~~
大神养成计划第一阶段开启~
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="450" WindowStyle="None" AllowsTransparency="True" Background="{x:Null}"
MouseLeftButtonDown="Window_MouseLeftButtonDown">
<Canvas Height="270" Width="430">
<Border Height="270" Width="430" CornerRadius="15" Background="Yellow" Opacity="0.4" Canvas.Left="0" Canvas.Top="0"></Border>
<Border Height="30" Width="430" Canvas.Top="0" CornerRadius="10" Background="Cyan" Opacity="0.5">
<Label Height="25" Width="180" Content="TIMELY designed by wff"></Label>
</Border>
<Image Source="Image\close.png" Height="25" Width="25" Canvas.Left="397" Canvas.Top="1" MouseLeftButtonDown="Image_MouseLeftButtonDown"></Image>
<Image Source="Image\77.png" x:Name="img_pp" Height="60" Width="60" Canvas.Top="40" Canvas.Left="347">
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform></TranslateTransform>
</TransformGroup>
</Image.RenderTransform>
</Image>
<Image Source="Image\background.png" Height="180" Width="190" Canvas.Left="12" Canvas.Top="52"></Image>
<Image Source="Image\1.png" Height="20" Width="20" Canvas.Left="126" Canvas.Top="78"></Image>
<Image Source="Image\2.png" Height="20" Width="20" Canvas.Left="152" Canvas.Top="97"></Image>
<Image Source="Image\3.png" Height="20" Width="20" Canvas.Left="158" Canvas.Top="129"></Image>
<Image Source="Image\4.png" Height="20" Width="20" Canvas.Left="151" Canvas.Top="164"></Image>
<Image Source="Image\5.png" Height="20" Width="20" Canvas.Left="128" Canvas.Top="185"></Image>
<Image Source="Image\6.png" Height="20" Width="20" Canvas.Left="96" Canvas.Top="195"></Image>
<Image Source="Image\7.png" Height="20" Width="20" Canvas.Left="64" Canvas.Top="188"></Image>
<Image Source="Image\8.png" Height="20" Width="20" Canvas.Left="42" Canvas.Top="164"></Image>
<Image Source="Image\9.png" Height="20" Width="20" Canvas.Left="32" Canvas.Top="131"></Image>
<Image Source="Image\1.png" Height="16" Width="20" Canvas.Left="37" Canvas.Top="99"></Image>
<Image Source="Image\0.png" Height="16" Width="20" Canvas.Left="46" Canvas.Top="99"></Image>
<Image Source="Image\1.png" Height="16" Width="20" Canvas.Left="63" Canvas.Top="76"></Image>
<Image Source="Image\1.png" Height="16" Width="20" Canvas.Left="71" Canvas.Top="76"></Image>
<Image Source="Image\1.png" Height="16" Width="20" Canvas.Left="92" Canvas.Top="68"></Image>
<Image Source="Image\2.png" Height="16" Width="20" Canvas.Left="101" Canvas.Top="68"></Image>
<Image Source="Image\hour.png" x:Name="img_hour" Height="80" Width="30" Canvas.Left="91" Canvas.Top="87"
RenderTransformOrigin="0.5,0.7">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="TM_Hour"></RotateTransform>
</TransformGroup>
</Image.RenderTransform>
</Image>
<Image Source="Image\minute.png" x:Name="img_minute" Height="80" Width="30" Canvas.Left="91" Canvas.Top="87"
RenderTransformOrigin="0.5,0.7">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="TM_Minute"></RotateTransform>
</TransformGroup>
</Image.RenderTransform>
</Image>
<Image Source="Image\second.png" x:Name="img_second" Height="80" Width="30" Canvas.Left="91" Canvas.Top="87"
RenderTransformOrigin="0.5,0.7">
<Image.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="TM_Second"></RotateTransform>
</TransformGroup>
</Image.RenderTransform>
</Image>
</Canvas>
</Window>
布局代码如上,UI搞定
有一点需要注意<RotateTransform x:Name="TM_Second"></RotateTransform>我已经在代码中标红
在这里,我为旋转动画添加了一个名字,这样我就能在cs文件中访问到旋转动画的Angel属性,并为其赋值
接着是如何调用系统时间,然后确定时分秒的指针转动的角度
首先,我们要知道在wpf中也有类似于winfom中的timer类DispatcherTimer;
然后根据当前时间计算当前时针分针秒针的位置
接着,确定每秒中指针应该转动的角度
下面开始实现
cs文件中引入using System.Windows.Threading;
然后在mainwindow的初始化函数下边调用我们自己的初始化函数open(){
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(1);//每毫秒执行一次,这里我主要是想实现平滑的转动,而不是
//一般时钟的跳动;
timer.Tick += new EventHandler(timer_Tick);//为timer绑定事件
timer.Start();开启代码
}
接下来是绑定事件的代码void timer_Tick(object sender, EventArgs e)
{
int hour = DateTime.Now.Hour;//获取当前时间的小时数
int minute = DateTime.Now.Minute;/获取当前时间的分钟数
int second = DateTime.Now.Second;/获取当前时间的秒数
int second2 = DateTime.Now.Millisecond;/获取当前时间的毫秒数
TM_Second.Angle = second*6+second2 * 0.006;//秒针应该转动的角度
TM_Minute.Angle = second/10+minute*6;//分针应该转动的角度
TM_Hour.Angle = minute/2+hour * 30;//时针应该转动的角度
}
ok,到这里就已经实现整个时钟的转动完成~
PS,学C#的wpf才一节课,实现时钟真心有难度,网上找了很多的资料,好像有什么数据绑定,但是看了表示完全看不懂。。。。于是灵机一转想到了可不可以用timer,然后去百度,竟然让我给找到了关于winfom和wpftimer的比较。。可惜当时是用手机找的,没有记下博客的地址,总之谢谢这位帅哥给我的灵感~
博客原创,转载请注明出处,谢谢~、
需要源码,请发邮件wff_1994@126.com索取~(我这个小白都感觉已经很详细了~,应该不需要源码了吧)