WPF 画心2.0版之元旦快乐

2017年元旦已经到了,想做一个祝福语的窗口,就把上一篇画心的程序改了改,变成了如下界面。

说下改动的地方,首先窗口没有标题栏了。

MainWindow.xaml

  AllowsTransparency="True"
  MouseDoubleClick="Window_MouseDoubleClick"
  WindowStyle="None" Background="#00FFFFFF" Loaded="Window_Loaded" MouseMove="Window_MouseMove"
  Title="MainWindow" Height="700" Width="900"

中间圆形按钮的样式

<Style TargetType="Button" x:Key="ButtonStyle">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <Ellipse Width="200" Height="200">
                                    <Ellipse.Fill>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                            <GradientStop Offset="0" Color="blue"/>
                                            <GradientStop Offset="1" Color="LightBlue"/>
                                        </LinearGradientBrush>
                                    </Ellipse.Fill>
                                </Ellipse>
                                <Ellipse Width="180" Height="180">
                                    <Ellipse.Fill>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                            <GradientStop Offset="0" Color="White"/>
                                            <GradientStop Offset="1" Color="Transparent"/>
                                        </LinearGradientBrush>
                                    </Ellipse.Fill>
                                </Ellipse>
                                <ContentControl VerticalAlignment="Center" HorizontalAlignment="Center" Content="{TemplateBinding Content}"
                                     FontSize="20" FontWeight="Bold" Foreground="Red"/>
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

虽然没有了标题栏,为了能够让窗口自由移动

      private void Window_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                this.DragMove();
            }
        }

双击鼠标,关闭窗口

        private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
           this.Close();
        }

不再使用线程睡眠的方式来动态显示心的生成,这次采用计时器。

      private DispatcherTimer timer = new DispatcherTimer();//创建定时器对象  

        public MainWindow()
        {
            InitializeComponent();

            WindowStartupLocation = WindowStartupLocation.CenterScreen;

            this.bendediction.Content = "2017年\r\n元旦快乐";
            timer.Tick += new EventHandler(timer_Tick); //添加事件,定时到事件
            timer.Interval = TimeSpan.FromMilliseconds(100);//设置定时长
            timer.Start();
        }

        void timer_Tick(object sender, EventArgs e)
        {
            if (iTick < maxStep)
            {
                CreateHeartLine(iTick);
            }
            else
            {
                timer.Stop();
            }
            iTick++;
        }

  本次心的生成算法,基本不变,只是把心的半径和位置调整了下。

        private void CreateHeartLine(int iTick)
        {
            centerPt = canvas_Shape.Width/ 4;
            radius = canvas_Shape.Width / 6;
            for (int i = 0; i < iTick; i++)
            {
                System.Windows.Controls.Image img = new System.Windows.Controls.Image();

                img.Source =  new BitmapImage(new Uri(@"image/" + 2 + ".png", UriKind.Relative));//给出照片路径
                img.Height = 200;
                img.Width = 200;
                img.Stretch = Stretch.Fill;

                double angle = 2 * Math.PI / maxStep * i;

                //桃形心
                double x = centerPt - 16 * (Math.Sin(angle) * Math.Sin(angle) * Math.Sin(angle)) * 20;//
                double y = centerPt - (13 * Math.Cos(angle) - 5 * Math.Cos(2 * angle) - 2 * Math.Cos(3 * angle) - Math.Cos(4 * angle)) * 20;//
                Canvas.SetLeft(img, x);
                Canvas.SetTop(img, y);
                canvas_Shape.Children.Add(img);
            }
        }
     

为了添加背景音乐,使用了MediaElement。

       private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            me.LoadedBehavior = MediaState.Manual;  //设置为手动控制
            me.UnloadedBehavior = MediaState.Manual;
            string strPath = string.Format(@"{0}\data\music\bk.mp3", System.Windows.Forms.Application.StartupPath);
            Uri uri = new Uri(strPath, UriKind.Relative);
            me.Source = uri;

            me.IsHitTestVisible = true;
            me.MediaEnded += new RoutedEventHandler(me_MediaEnded);
            gd.Children.Add(me);
            me.Play();
        }

 为了能够循环播放

      private void me_MediaEnded(object sender, RoutedEventArgs e)
        {
            me.Stop();
            me.Play();
        }
时间: 2024-10-12 20:36:13

WPF 画心2.0版之元旦快乐的相关文章

WordPress版微信小程序2.2.0版发布

2017年8月12日WordPress版微信小程序2.2.0版通过了微信的审核正式发布,此版本的更新以完善功能为主.主要更新的功能是:站内链接,猜你喜欢,热点文章. WordPress版微信小程序开放源码地址:https://github.com/iamxjb/winxin-app-watch-life.net 了解程序的开发历程及开发技术,建议看看相关版本的更新文章: 1.用微信小程序连接WordPress网站 2.WordPress版微信小程序1.5版本发布 3.WordPress版微信小程

坦克大战系列(3.0版)

无论头上是怎样的天空,我准备承受任何风暴.--拜伦 本讲内容:坦克3.0版(面向对象的思想) 要求:画出我方坦克会动并且会发射子弹.画出敌人坦克 一.同一个包下建二个文件分别为:MyTankGame.Members(负责其它成员譬如:制造坦克.子弹等) MyTankGame类 /** * 功能:坦克游戏的3.0版本 * 1:画出坦克 * 2:实现我方坦克移动并且會發子彈,并 画出敌人的坦克 */ package a; import javax.swing.*; import java.awt.*

SWFUpload 2.5.0版 官方说明文档 中文翻译版

原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2.5.0 Documentation Table of Contents 内容列表 详情请点击翻译:yukon12345 2010.6.10 SWFUpload SWFUpload 版本 2 概览 (Overview) 入门( Getting Started) js对象 (SWFUpload Jav

从零开始制作H5应用(2)——V2.0版,多页单张图片滑动,透明过渡及交互指示

上一次,我们制作了我们第一个H5场景应用的V1.0版,这次我们趁热打铁,在上一版的基础上对层序进行修改和扩展. 任务 1.页面数量由3张增加至9张: 2.每张页面中放入一张全屏自适应的图片: 3.修复页面过渡中的白场,并在过渡时加入页面的透明效果 4.给予用户"向上滑动"的交互提示: 分析 老规矩,拿到任务需求后,我们还是要先具体分析每一步的实现思路: 1.页面数量由3张增加至9张 这个太简单啦,就是再复制出来6个div,并给他们添加类名就可以啦:) 2.每张页面中放入一张全屏自适应的

iOS 应用2.0版怎么做(转)

移动互联网如火如荼,iOS 应用+ Android 应用+ 手机站似乎成了所有互联网公司的标配,你的网站要是还没有个iOS 应用,似乎都不好意思跟人打招呼.iOS 应用诞生毕竟才只有不到5年的时间,各个方面还都处在起步阶段.不管是出于团队缺乏经验,还是那个“唯快不破”的铁律,往往这些iOS 应用的第一个版本都比较简陋,尤其在技术架构上.这篇文章,我想跟大家探讨的就是这个问题,当你的iOS应用已经有一个版本在线的情况下,如何去构建一款可以支持高效迭代,快速响应的2.0版.首先,应用的架构要层次清晰

仿QQ聊天软件2.0版

仿QQ聊天软件2.0版 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907     上次课设做了Java版的仿QQ聊天程序,这次软件实训,我们继续完善了仿QQ聊天程序,将上次未完成及不完善的地方进行完善和改进,还新加了部分功能:表情输入.气泡模式.文件传输.截屏.语音聊天.逐步向QQ的基本功能靠齐.通过这次软件实训,又有了很多收获. 一.设计内容及要求 1.1综述 A.系统概述 我们要做的就是类似QQ这样的面向企业内部的聊天软件,基本功能和QQ类似.首先,

web.xml格式(避免eclipse更新延迟-3.0版)

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee htt

坦克大战系列(8.0版)

人生在勤,不索何获.--张衡 本讲内容:坦克大战8.0版(面向对象的思想) 一.解决:防止敌人坦克重叠运动 1.定义一个Vector容器,装所有敌人的坦克(为了得到所有坦克坐标) 2.定义一个方法getEts()可以得到敌人的坦克(为了得到所有坦克坐标) 3.在我的我的面板的构造方法调用getEts() 4.定义一个判断是否碰到了别的敌人的坦克的方法isTouchOtherEnemy() 5.在设置敌人坦克随机走动那调用isTouchOtherEnemy() 二.解决:我方坦克死亡(即隐身)后,

firefox os 2.0版模拟器上QQ初体验

对于firefox os 爱好者而言,firefox os 手机迟迟没在中国上市会感到些许遗憾,但我们要相信firefox os 登陆中国是迟早的事,腾讯QQ已经登陆firefox os 应用市场,今天我们就从模拟器上感受一番腾讯QQ,想体验的爱好者们可以参考安装模拟器抢先体验一番! 下载安装QQ 安装. 安装完成 登陆界面; 聊天界面 喜欢的盆友快去试试吧!!!   编辑(5狐网)firefox os 2.0版模拟器上QQ初体验,布布扣,bubuko.com