WPF的时钟

先上图,WPF半透明风时钟,我的大爱啊~~羡慕

大神养成计划第一阶段开启~


 
<Window x:Class="Timely.MainWindow"
        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索取~(害羞我这个小白都感觉已经很详细了~,应该不需要源码了吧)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值