好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button

我们先来看看Quartz MS字体动态显示系统时间的效果,难度相较于上一篇也要简单很多。

首先是定义一个TextBlock例如以下。

<Grid>
     <TextBlock Name="tBlockTime" HorizontalAlignment="Center"
         VerticalAlignment="Center" FontSize="68" Foreground="Green"/>
</Grid>

后台代码例如以下:

private DispatcherTimer dispatcherTimer;

public MainWindow()
{
     InitializeComponent();

     dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
     // 当间隔时间过去时发生的事件
     dispatcherTimer.Tick += new EventHandler(ShowCurrentTime);
     dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 1);
     dispatcherTimer.Start();
}

public void ShowCurrentTime(object sender, EventArgs e)
{
      //获得星期
      //this.tBlockTime.Text = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("zh-cn"));
      //this.tBlockTime.Text += "\n";

      //获得年月日
      //this.tBlockTime.Text = DateTime.Now.ToString("yyyy:MM:dd");   //yyyy年MM月dd日
      //this.tBlockTime.Text += "\n";

      //获得时分秒
      this.tBlockTime.Text = DateTime.Now.ToString("HH:mm:ss");
}

注意在这个时间的设置时。第一步显示的时间是”=”。随后都是”+=”。比方说要先显示星期。再显示时分秒。就是这种:

//获得星期
this.tBlockTime.Text = DateTime.Now.ToString("dddd", new System.Globalization.CultureInfo("zh-cn"));
this.tBlockTime.Text += "\n";

//获得时分秒
this.tBlockTime.Text += DateTime.Now.ToString("HH:mm:ss");

然后还须要字体,然而字体并不可能是写出来的……我们都须要须要引用资源。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Width="500" Height="200"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="Black">

    <Window.Resources>
        <Style x:Key="QuartzMSFont">
            <Setter Property="TextElement.FontFamily" Value="Resources/#Quartz MS"/>
        </Style>
    </Window.Resources>

    <Grid>
        <TextBlock Name="tBlockTime" Style="{DynamicResource QuartzMSFont}"
                   HorizontalAlignment="Center"
                   VerticalAlignment="Center" FontSize="68" Foreground="Green"/>
    </Grid>

</Window>

这里我仅仅是给大家一个启示,假设系统自带的字体已经不能满足你的艺术感,你全然能够另外找字体。甚至也能够创造字体,近来谷歌苹果都在做这个。

我已经把字体放到项目中了。须要源代码/字体的童鞋直接留邮箱……

这一篇内容不多,也算不上精彩。但童鞋们能够看看上一篇:好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字 ,也能够今明天再来看看第三篇~



没想到这篇博客被推荐了啦,内容这么少……绝不能让如此不堪的文章放在首页啦,所以就来加入一点东西咯——也就是前文中的第二个GIF(个人感觉还是蛮炫酷的)。

首先给窗口设置一下吧:

<Window x:Class="WPFButton.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     Title="MainWindow"
        Width="600" Height="400"
        WindowStyle="None"
        AllowsTransparency="True"
        Background="Wheat">

这段代码中的属性在前一篇中都有介绍,大家能够看看。

我定义了这么多的Button,是为了后面的演示效果而已。实际中可能用不到这么多button吧,哈哈。

     <Grid>
        <Button Content="Yellow"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="Yellow" Margin="90,37,450,323"/>

        <Button Content="Purple"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="Purple" Margin="450,230,90,130" />

        <Button Content="Green"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="Green" Margin="90,130,450,230" />

        <Button Content="DarkCyan"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="DarkCyan" Margin="450,37,90,323" />

        <Button Content="Black"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="Black" Margin="90,230,450,130"  />

        <Button Content="OrangeRed"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="OrangeRed" Margin="450,136,90,224"/>

        <Button Content="Violet"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="Violet" Margin="270,37,270,323" />

        <Button Content="CornflowerBlue"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="CornflowerBlue" Margin="270,230,270,130"  />

        <Button Content="Lime"
                Style="{StaticResource ResourcesButtonStyle}"
                Background="Lime" Margin="270,136,270,224"/>

        <Button Content="Azure"
            Style="{StaticResource ResourcesButtonStyle}"
            Background="Azure" Margin="90,323,450,37"  />

        <Button Content="Turquoise"
            Style="{StaticResource ResourcesButtonStyle}"
            Background="Turquoise" Margin="270,323,270,37"  />

        <Button Content="Tomato"
            Style="{StaticResource ResourcesButtonStyle}"
            Background="Tomato" Margin="450,323,90,37" />
    </Grid>

这里面用了资源,不要着急。后面会慢慢道来~

假设不用资源它是长这种:

好吧,废话不多说,上资源。

 <Window.Resources>
        <Style x:Key="ResourcesButtonStyle" TargetType="{x:Type FrameworkElement}" >
            <Setter Property="Width" Value="60"/>
            <Setter Property="Height" Value="40"/>
            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect x:Name="OSE" BlurRadius="10"
                                      Color="Lime" Direction="0"
                                      Opacity="1"
                                      RenderingBias="Performance"
                                      ShadowDepth="0" >
                        <Storyboard.TargetProperty>
                            BlurRadius
                        </Storyboard.TargetProperty>
                    </DropShadowEffect>
                </Setter.Value>
            </Setter>
      </Style>
</Window.Resources>    

C#比較好学的一点就是这些属性呀什么的都能够通过名字来猜出来意思,即便猜不出来也能够通过不断的尝试来发现这些属性是做什么的。

属性RenderingBias能够设置側重于性能还是质量,就像电脑上的显卡设置里那样。

其它那些属性强烈推荐大家不断的改动数值观察终于调试出来程序的反应,这也算是小小的实验了。

上面的资源是静态,还须要加上Storyboard动画。动画嘛,能够以各种属性为參照,这里我以BlurRadius和Color。前者能够间接做出呼吸灯效果(只是后面我将其数值最大设置成了100,要是哪个呼吸灯像这样那就算是喘气了),后者能够更换“呼吸”的色彩。

<Style.Triggers>
   <EventTrigger RoutedEvent="GotFocus">
       <BeginStoryboard>
           <Storyboard>
               <DoubleAnimation
                  Storyboard.TargetProperty="(FrameworkElement.Effect).(DropShadowEffect.BlurRadius)"
                  From="0" To="100"
                  BeginTime="00:00:00" Duration="00:00:01"
                  AutoReverse="True"  RepeatBehavior="Forever"/>

              <ColorAnimationUsingKeyFrames
                  Storyboard.TargetProperty="(FrameworkElement.Effect).(DropShadowEffect.Color)"
                  RepeatBehavior="Forever" AutoReverse="True">
                  <EasingColorKeyFrame KeyTime="0" Value="Yellow"/>
                  <EasingColorKeyFrame KeyTime="0:0:0.4" Value="Purple"/>
                  <EasingColorKeyFrame KeyTime="0:0:0.8" Value="Green"/>
                  <EasingColorKeyFrame KeyTime="0:0:1.2" Value="DarkCyan"/>
                  <EasingColorKeyFrame KeyTime="0:0:1.6" Value="Black"/>
                  <EasingColorKeyFrame KeyTime="0:0:2.0" Value="OrangeRed"/>
                  <EasingColorKeyFrame KeyTime="0:0:2.4" Value="Violet"/>
                  <EasingColorKeyFrame KeyTime="0:0:2.8" Value="CornflowerBlue"/>
                  <EasingColorKeyFrame KeyTime="0:0:3.2" Value="Lime"/>
                  <EasingColorKeyFrame KeyTime="0:0:3.6" Value="Azure"/>
                  <EasingColorKeyFrame KeyTime="0:0:4.0" Value="Turquoise"/>
                  <EasingColorKeyFrame KeyTime="0:0:4.4" Value="Tomato"/>
              </ColorAnimationUsingKeyFrames>
          </Storyboard>
      </BeginStoryboard>
  </EventTrigger>
</Style.Triggers>

BeginTime是起始时间。KeyTime相似于Flash里的关键帧的时间。

前面是BlurRadius的变化,能够用From=”0” To=”100” ;而后面是Color,则须要用Value。

由于CSDN博客上最多仅仅能上传2M的图片,所以这些GIF都非常短啦。大家应该多动手尝试呢。我再来贴两张GIF吧~

真实的程序中可不是这种哦!

由于录制GIF的时候为了考虑2M的限制而不得不将录制的帧数调低。所以就“卡顿”成了这样,有明显的“波涛”效果。

大家能够用源代码调试看看。




感谢您的訪问。希望对您有所帮助。 欢迎大家关注、收藏以及评论。



为使本文得到斧正和提问,转载请注明出处:

http://blog.csdn.net/nomasp


时间: 2024-10-19 16:53:57

好玩的WPF第二弹:电子表字体显示时间+多彩呼吸灯特效button的相关文章

好玩的WPF第二弹:电子表字体+显示系统时间

效果呢就是这么个效果,难度相较于上一篇也要简单许多. 首先是定义一个TextBlock如下. <Grid> <TextBlock Name="tBlockTime" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="68" Foreground="Green"/> </Grid> 后台代码如

好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字

大家一进到博客就应该看到这张GIF了吧--好吧,今天不是星期一-- 那么就来一起做做这个效果啦!看完记得点赞哦~ 新建一个WPF项目 如果新建WPF项目应该不用我说了吧,在C#下面找找就好了. MainWindow.xaml 在初始的Window下添加如下属性: x:Name="mainWindow" WindowStartupLocation="CenterScreen" WindowState="Normal" WindowStyle=&qu

黑马程序员:赶紧下载iOS10开发教程第二弹

虽然6月13日WWDC2016的发布会结束了,但是本届大会的开发者session环节还在持续进行着.黑马程序员本着对技术的狂热,对学生负责的态度,仍然坚持每天对课程进行深入的研发.本文主要是黑马程序员对iOS 10 中SDK所更新的主要内容进行总结.根据黑马程序员惯例,在文章的最后,有相关相关教学视频及Demo会有分享链接,供各位下载! 1.Grand Center Dispatch GCD 在本次一更新主要有以下内容: ?创建私有队列 ?安排异步执行的工作项目(items) ?GCD能自动将工

解决使用MathJax时弹出框显示MathJax no longer loads a default configuration file的问题~

解决使用MathJax时弹出框显示MathJax no longer loads a default configuration file的问题~ MathJax no longer loads a default configuration file 2down votefavorite I have been getting this error message on Maths and Physics network MathJax no longer loads a default co

AndroidStudio使用教程(第二弹)

AndroidStudio使用教程(第二弹) 迁移Eclipse工程到Android Studio 官方文档中说Android Studio可以兼容Eclipse的现有工程,但需要做一些操作: Eclipse进行项目构建 首先升级ADT到最新版本, 好像是22之后,选择需要从Eclipse导出的工程,右键选择Export并选择Android下的Generate Gradle Build Files, 运行完成之后你会发现在项目目录中多了一个build.gradle, 这就是Android Stu

《我与希乐仑》第二弹

致徐敏: 如果你觉得我的这篇报道侵害了你和贵公司的权益,你可以上法院告我,但我说的都是事实,不怕你告,有事找我律师,谢谢! 我是希乐仑科技发展(上海)有限公司前员工,曾经为希乐仑立下汗马功劳.这公司从2014年2月份开始搞我,我去年的绩效是3.8/5.0,完全没有绩效问题.他们倒好,自从我查完我们公司某商业间谍之后,就给我穿小鞋,说我这个不好,那个拖延,这不是扯淡吗?公司在3月5日非法把我裁掉,而且直到现在还未支付我2月份工资,行吧,那我就不再沉默了,当我吃素的是吧!我现在把这件事情公之于众,望

JAVA学习绘图颜色及其笔画属性设置字体显示文字

package com.graphics; import java.awt.*; import java.awt.geom.Rectangle2D; import java.util.Date; import javax.swing.*; /** * * @author biexiansheng * */ public class DrawString extends JFrame{ private Shape rect;//矩形对象 private Font font;//字体对象 priva

深究angularJS系列 - 第二弹

深究angularJS系列 - 第二弹,在初步了解了Angular的基础上,进一步的针对Angular的控制器和作用域问题深入探究O(∩_∩)O~~ Angular控制器 控制器(Controller)的理解 控制器是对view的抽象,用来接收view的事件,响应view的请求: 控制器包含view的静态属性和动态的方法: 控制器与view是一对一的关系. 控制器(Controller)的结构 1 .controller("控制器的名字",function($scoppe){ 2 ..

C/C++中容器vector使用方法&lt;第二弹&gt;

此文总结常用vector操作,是前一篇的续作!只有代码,详细请看代码中的注释.出于反爬虫的目的,你不是在http://blog.csdn.net/zhanh1218上看到的,肯定不是最新最全的. /********************************************************************* * file_name: vector_test.cpp * * Created on: 2014年6月28日 下午3:34:23 * Author: The_T