天天看点

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

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

大家一进到博客就应该看到这张gif了吧……好吧,今天不是星期一……

那么就来一起做做这个效果啦!看完记得点赞哦~

如果新建wpf项目应该不用我说了吧,在c#下面找找就好了。

在初始的window下添加如下属性:

分别是什么意思呢?

1、给窗口命名,以后后面会用到的。

2、设置窗口的出现位置,这里设置为屏幕中心,你可以设置其他位置。

3、窗口的大小,我设置为正常,你也可以设置为全屏(maximized)。

4、窗口的样式,此处设为无标题。

5、窗口的边框,true表示无边框。

6、窗口的加载事件,稍后会补充的。

7、背景颜色,你可以再修改。

8、不可改变窗口尺寸。

然后被预设好的grid添加一个名字:

那么界面部分就设好咯。

你首先需要一个计时器:

还需要一个前面提到的window_loaded事件:

我们现在应该来写timer_tick事件了,不过在此之前我们应该决定将要显示什么内容。就以“今天星期一”好了,我们可以创建一个数组,用一个整型变量作为计数器。

我接下来可能比较啰嗦,但只是因为想必看我博客的大多是学生,希望能稍微教教大家思考的方式。

在mainwindow函数前定义全局变量如下:

计时器方法如下:

如果计数器已经为0了,说明数组内的内容已经全部都显示了一遍,那么将其重置后再次开启计数器。

如果不为0,先实例化一个textwindow窗口,至于这个窗口是做什么的,我们稍后再看。

再随后我们将数组内的字符串赋值给textwindow类的实例的属性,并设置它的显示位置。

然后将textwindow窗口添加到maingrid中,最后将计数器减一。

新建一个xaml页面大家也会的吧?当然,也可以直接创建usercontrol页面。

添加如下代码(我会逐个说明的):

1、rendertransformorigin的作用,通俗的讲,就是文字即将从哪个角度出来。此处是窗口的中心。

<1,0>是左下角;<0,1>是右上角

<1,1>是左上角;<0.0>是右下角

2、loaded同样和前面是一样是加载事件

3、transformgroup,我们稍后会见到

4、textblock用来显示文本

在类textwindow中设置以下变量,我们前面也看到了,会从mainwindow中传入相关参数:

因为窗口会有抖动效果,所以呢,就需要两个参数来定位它:

storyboard以前我都是用blend写的,这里直接刷代码有点难度。

记得设置一个属性来传递文本参数。

如前所述,是时候传递这两个参数了:

接下来就是这个项目里最重大的过程了,难度也很大,每一个参数都得多次尝试才好。

先写方法:

方法内定义动画:

文字的缩放过程:

试想一下,如果文字堂而皇之的冒了出来不太美观吧?如果有一个由大到小的缩放过程,那不是很赞么?

代码我觉得应该都能看懂,settargetproperty属性是在后台代码中设置属性的一个非常好的方式,大家如果会用“资源”,可以类比来思考一下。如果没用过资源也没关系,后面我们会见到。

前面是写的缩放部分,我们还可以添加一个透明度的过渡过程如下:

最终切记将这三个实例添加到storyboard中。

窗口抖动效果如下:

和上面的缩放和透明度一样,添加这些属性到storyboard中。

最后就是注册事件咯:

至此该方法就完成了,然后就开始新的storyboard_completed方法了。

这个方法所做的事情简单的说,就是在完成一个storyboard动画后接触所有绑定,刷新画面(不然上一次的文字不消失回和下一次显示的文字重叠),然后将窗口归位。

那么至此就来调试一下吧~

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

呀,文字的出现顺序反了哦……

想想问题出在这里呢:

我们首先将数组最后一个打印出来了,然后依次第四个、第三个……

要么将打印顺序改变,要么定义数组的时候反向定义,但这两种方式都不人性化。比如说我们可能要让用户输入数组内容,总不好让用户反向输入吧?

所以我们中间插入一个方法,来讲数组逆序输出。

然后在mainwindow函数中执行该方法:

调试一下果然奏效~

不过还有一种更加简单的方式,c#的自带方法:

还可能你会遇到这个问题:不就是“今天星期一”五个字嘛,至于让每个字弄成一个字符串然后组成数组嘛,直接上字符串不行?

当然可以:

那么逆序的问题怎么解决?

字符串本身也是数组,只不过是由字符组成的。

如果读者是初学者的话,我也来证明一下吧。

还记得这个么?

最后无论是字符还是字符串我都调用了tostring()方法来转换成字符,但如果txt是字符串,而把.tostring()去掉的话就会报错了,因为它不是字符串。

好了,下面来给大家看看另一种取出字符串中字符的方法:

这个真的非常好用。

so……到此为止了,和开篇中的gif效果一模一样了。

那么给大家留一个小练习,如果txt是一个字符串数组呢?

需要每次都打印出来一句话,而非一个字,该怎么做?

文章结尾我会给出思路,大家不妨在看下文前先试试。

好了,标题中的窗口抖动和倒计时显示文字都有了。那么边框呢?现在虽然是无边框了,但总感觉不那么精致,怎样让它有阴影效果呢?

那么,打开app.xaml,添加如下资源样式就好了。

最后在mainwindow.xaml下的window中添加该资源:

那么最终的效果如下:

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

那么关于前面的小练习呢,其实解决的障碍在于,一个字符串的字数太多,原本的

textblock的200宽度已经不能满足了,于是乎,干脆删了它:

当然了,字体也要调小一点。

可是这样并不完美,因为有这么多字,一秒钟的时间并不能看完吧。所以还得修改一下比较好,我将我修改过的地方贴出来……

好了,博客结束啦,我也写了好久。要源码的话就在评论里留邮箱吧……我一个一个发了……

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

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

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

http://blog.csdn.net/nomasp