WPF 画心2.0版之元旦快乐

简介: 原文:WPF 画心2.0版之元旦快乐 2017年元旦已经到了,想做一个祝福语的窗口,就把上一篇画心的程序改了改,变成了如下界面。    说下改动的地方,首先窗口没有标题栏了。 MainWindow.
原文: 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();
        }

 

目录
相关文章
|
小程序 开发工具 开发者
小程序vant-weapp-商品卡片列表
小程序vant-weapp-商品卡片列表
441 0
|
机器学习/深度学习 数据采集 大数据
大数据技术下的企业智能决策支持系统
大数据技术下的企业智能决策支持系统
488 0
|
Linux 开发工具
嵌入式Linux开发环境搭建之八---Ubuntu16.04 tftp环境搭建
嵌入式Linux开发环境搭建之八---Ubuntu16.04 tftp环境搭建
248 0
|
存储 缓存 前端开发
《SpringBoot启动流程二》:七千字源码分析SpringApplication构造阶段
《SpringBoot启动流程二》:七千字源码分析SpringApplication构造阶段
240 0
《SpringBoot启动流程二》:七千字源码分析SpringApplication构造阶段
|
存储 Java
JAVA虚拟机 自动内存管理机制(一)
运行时数据区域 java虚拟机在执行java程序的过程中会把他所管理的内存划分为若干个不同数据区域。有的区域随着虚拟机进程的启动而存在,而有的区域依赖用户的线程的启动与结束而建立和销毁。java虚拟机所管理的内存主要包括以下几个运行时的数据区域。
2073 0
|
SQL
T-SQL---多值模糊查询的处理
原文:T-SQL---多值模糊查询的处理   多值模糊查询的处理 所谓多值模糊查询,就是应用程序中传递过来多个参数,对这些参数做拆分,拆分之后,对拆分结果的key值分别做模糊查询处理 对于精确匹配时,不管是单个Key值还是多个Key值,都很容易处理,备选方案也很多 对于模糊查询,单个key值...
1434 0
|
设计模式
入门设计模式之适配器模式
版权声明:本文为博主原创文章,未经博主允许不得转载。博客源地址为zhixiang.org.cn https://blog.csdn.net/myFirstCN/article/details/80866469 学习更多设计模式请参考:入门设计模式之汇总篇 适配器模式:把一个类的接口转换为客户端需要的另一个接口 比如说,我们去相亲,目标中的女孩是会唱歌会跳舞的女孩,但是介绍人说这个女孩只会唱歌,不会跳舞,那你肯定不会满意呀。
878 0
|
Java 数据库连接 关系型数据库
|
3天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1092 0
|
12天前
|
人工智能 运维 安全