zoukankan      html  css  js  c++  java
  • WPF 自定义窗口

      在WPF中我们经常需要抛去windows自带的窗口的样式,设定一些自定义样式的窗口,这个时候我们需要设定 WindowStyle="None" 来移除windows自带的界面样式。除此之外我们还需要设定 AllowsTransparency ="True" 来让窗口支持透明的效果。

      这里分享一个 自定义窗口的demo,该demo实现的基本功能有:

    1. 实现自定义窗口的最小化、最大化、还原、关闭功能,默认为最大化;
    2. 最小化、最大化、还原、关闭按钮在捕获鼠标之后会有动画改变图片;
    3. 双击最上面的菜单栏也能实现窗口的最大化或者还原;
    4. 支持窗口在非最大化的情况下拖动,最大化后不能拖动;
    5. 窗口的最大化不会遮罩windows系统的任务栏;

    最大化、及还原的代码:

     1  if (isMaxSized)
     2                     {
     3                         this.Width = normalRect.Width;
     4                         this.Height = normalRect.Height;
     5                         this.Left = normalRect.Left;
     6                         this.Top = normalRect.Top;
     7                         this.WindowState = WindowState.Normal;
     8                         this.isMaxSized = false; 
     9                         btn.Tag = "maxSize";
    10                     }
    11                     else
    12                     {
    13                         normalRect = new Rect(this.Left, this.Top, this.ActualWidth, this.ActualHeight);
    14                         Rect rc = SystemParameters.WorkArea;
    15                         this.Width = rc.Width;
    16                         this.Height = rc.Height;
    17                         this.Left = 0;
    18                         this.Top = 0;
    19                         this.isMaxSized = true; 
    20                         btn.Tag = "normalSize";
    21                     }

     切换图片路径的动画代码:

     1  var objKeyFrames = new ObjectAnimationUsingKeyFrames();
     2             objKeyFrames.Duration = TimeSpan.FromMilliseconds(100);
     3             objKeyFrames.KeyFrames.Add(new DiscreteObjectKeyFrame
     4             {
     5                 Value = new BitmapImage(new Uri(imgUrl, UriKind.Relative))
     6             });
     7             Storyboard story = new Storyboard();
     8             Storyboard.SetTarget(story, img);
     9             Storyboard.SetTargetProperty(story, new PropertyPath(Image.SourceProperty));
    10             story.Children.Add(objKeyFrames);
    11             story.Begin();

    PS:

    1. 窗口的最大化不会遮罩windows系统的任务栏,这里的话我们是先获取整个屏幕的工作区域大小,然后设定窗口最大化后的宽度和高度为工作区的大小。
    2. 为了共享按钮的MouseEnter及MouseLeave事件的动画,我们没在XAML中为每个按钮写动画,而是通过后台代码来实现。

    最后附上demo百度云下载地址  请猛戳这里  密码: um7m

  • 相关阅读:
    Centos7下安装pip
    Docker进入容器后使用ifconfig等命令“command not found”解决办法
    安装包安装npm
    grafna与饼状图
    Postgresql导出数据报版本不对
    添加动物欢迎语
    zabbix性能优化记
    CPU使用情况之平均负载
    centos7以rpm方法装mysql5.7及大坑
    光速搭lvs + keepalived + nginx
  • 原文地址:https://www.cnblogs.com/rpoplar/p/4525970.html
Copyright © 2011-2022 走看看