WPF 过渡效果
http://blog.csdn.net/lhx527099095/article/details/8005095
先上张效果图看看 如果不如您的法眼 可以移步了 或者有更好的效果 可以留言给我

废话不多说 直接贴代码 一个usercontrol
- <UserControl x:Class="LoadingMask_Demo.LoadingWait"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- IsVisibleChanged="HandleVisibleChanged">
- <UserControl.Background>
- <SolidColorBrush Color="Black" Opacity="0.2" />
- </UserControl.Background>
- <UserControl.Resources>
- <SolidColorBrush Color="#FF007BE5" x:Key="CirclesColor" />
- <!--<SolidColorBrush Color="Black" x:Key="BackgroundColor" Opacity=".20" />-->
- </UserControl.Resources>
- <Viewbox Width="100" Height="100"
- HorizontalAlignment="Center"
- VerticalAlignment="Center">
- <Grid x:Name="LayoutRoot"
- Background="Transparent"
- ToolTip="Please wait...."
- HorizontalAlignment="Center"
- VerticalAlignment="Center">
- <TextBlock Text="Loading..." HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="14" Foreground="#FFE3953D" FontWeight="Bold" />
- <Canvas RenderTransformOrigin="0.5,0.5"
- HorizontalAlignment="Center"
- VerticalAlignment="Center" Width="120"
- Height="120" Loaded="HandleLoaded"
- Unloaded="HandleUnloaded" >
- <Ellipse x:Name="C0" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="1.0"/>
- <Ellipse x:Name="C1" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.9"/>
- <Ellipse x:Name="C2" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.8"/>
- <Ellipse x:Name="C3" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.7"/>
- <Ellipse x:Name="C4" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.6"/>
- <Ellipse x:Name="C5" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.5"/>
- <Ellipse x:Name="C6" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.4"/>
- <Ellipse x:Name="C7" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.3"/>
- <Ellipse x:Name="C8" Width="20" Height="20"
- Canvas.Left="0"
- Canvas.Top="0" Stretch="Fill"
- Fill="{StaticResource CirclesColor}" Opacity="0.2"/>
- <Canvas.RenderTransform>
- <RotateTransform x:Name="SpinnerRotate"
- Angle="0" />
- </Canvas.RenderTransform>
- </Canvas>
- </Grid>
- </Viewbox>
- </UserControl>
- 后台代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- using System.Windows.Threading;
- namespace LoadingMask_Demo
- {
- /// <summary>
- /// Interaction logic for LoadingWait.xaml
- /// </summary>
- public partial class LoadingWait : UserControl
- {
- #region Data
- private readonly DispatcherTimer animationTimer;
- #endregion
- #region Constructor
- public LoadingWait()
- {
- InitializeComponent();
- animationTimer = new DispatcherTimer(
- DispatcherPriority.ContextIdle, Dispatcher);
- animationTimer.Interval = new TimeSpan(0, 0, 0, 0, 90);
- }
- #endregion
- #region Private Methods
- private void Start()
- {
- animationTimer.Tick += HandleAnimationTick;
- animationTimer.Start();
- }
- private void Stop()
- {
- animationTimer.Stop();
- animationTimer.Tick -= HandleAnimationTick;
- }
- private void HandleAnimationTick(object sender, EventArgs e)
- {
- SpinnerRotate.Angle = (SpinnerRotate.Angle + 36) % 360;
- }
- private void HandleLoaded(object sender, RoutedEventArgs e)
- {
- const double offset = Math.PI;
- const double step = Math.PI * 2 / 10.0;
- SetPosition(C0, offset, 0.0, step);
- SetPosition(C1, offset, 1.0, step);
- SetPosition(C2, offset, 2.0, step);
- SetPosition(C3, offset, 3.0, step);
- SetPosition(C4, offset, 4.0, step);
- SetPosition(C5, offset, 5.0, step);
- SetPosition(C6, offset, 6.0, step);
- SetPosition(C7, offset, 7.0, step);
- SetPosition(C8, offset, 8.0, step);
- }
- private void SetPosition(Ellipse ellipse, double offset,
- double posOffSet, double step)
- {
- ellipse.SetValue(Canvas.LeftProperty, 50.0
- + Math.Sin(offset + posOffSet * step) * 50.0);
- ellipse.SetValue(Canvas.TopProperty, 50
- + Math.Cos(offset + posOffSet * step) * 50.0);
- }
- private void HandleUnloaded(object sender, RoutedEventArgs e)
- {
- Stop();
- }
- private void HandleVisibleChanged(object sender,
- DependencyPropertyChangedEventArgs e)
- {
- bool isVisible = (bool)e.NewValue;
- if (isVisible)
- Start();
- else
- Stop();
- }
- #endregion
- }
- }
调用的代码也贴出来吧
- <Window x:Class="LoadingMask_Demo.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="350" Width="525"
- xmlns:local="clr-namespace:LoadingMask_Demo"
- >
- <DockPanel>
- <StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
- <Button Content="show" Width="70" Height="30" Click="ShowButton_Click" />
- <Button Content="hide" Width="70" Height="30" Click="HideButton_Click"/>
- </StackPanel>
- <Grid Background="#FF484848" DockPanel.Dock="Bottom">
- <TextBlock Text="asdfasdfasdf" Foreground="White"/>
- <local:LoadingWait x:Name="_loading" Visibility="Collapsed"/>
- </Grid>
- </DockPanel>
- </Window>
- 后台代码
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace LoadingMask_Demo
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- private void ShowButton_Click(object sender, RoutedEventArgs e)
- {
- this._loading.Visibility = Visibility.Visible;
- }
- private void HideButton_Click(object sender, RoutedEventArgs e)
- {
- this._loading.Visibility = Visibility.Collapsed;
- }
- }
- }
WPF 过渡效果的更多相关文章
- C# WPF过渡效果实现(C# WPF Material Design UI: Transitions)
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- Silverlight及WPF中实现自定义BusyIndicator
在开发Silverlight或者WPF项目时,当我们调用Web服务来加载一些数据时,由于数据量比较大需要较长的时间,需要用户等待,为了给用户友好的提示和避免用户在加载数据过程中进行重复操作,我们通常使 ...
- wpf动画概述
http://msdn.microsoft.com/zh-cn/library/vstudio/ms752312(v=vs.100).aspx Windows Presentation Foundat ...
- WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法。
原文:WPF编程,通过KeyFrame 类型制作控件线性动画的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/articl ...
- WPF中的动画——(五)关键帧动画
与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值. 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个 ...
- silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发) 这章有点长,所以我分成了两章.这一章主要是准备工作,差不多算美工篇吧,这章基本不会介绍多少动画效果,主要讲 ...
- silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上.我想写成教程教大家怎么开发出来,会不会 ...
- 【WPF学习】第五十三章 动画类型回顾
创建动画面临的第一个挑战是为动画选择正确的属性.期望的结果(例如,在窗口中移动元素)与需要使用的属性(在这种情况下是Canvas.Left和Canvas.Top属性)之间的关系并不总是很直观.下面是一 ...
- 【WPF学习】第六十六章 支持可视化状态
上一章介绍的ColorPicker控件,是控件设计的最好示例.因为其行为和可视化外观是精心分离的,所以其他设计人员可开发动态改变其外观的新模板. ColorPicker控件如此简单的一个原因是不涉及状 ...
随机推荐
- Python语法之用户交互与基本运算符
一.与用户交互 1.接收用户输入 python3中的input会把用户输入的所有内容都存成str类型 age = input("请输入您的年龄: ") # "内容&quo ...
- Vue 实现微信提示浏览器转跳功能
<template> <div class="main"> <div :class="show==true ? 'block':'block ...
- MATLAB—数组运算及数组化编程
文章目录 前言 一.数组的结构和创建 1.数组及其结构 2.行数组的创建 3.对数组构造的操作 二.数组元素编址及寻访 1.数组元素的编址 2.二维数组元素的寻访 三.数组运算 非数的问题 前言 编程 ...
- 【现学现卖】th:href标签动态路径设置,thymeleaf获取session中的属性值
update:2020-02-28:按道理来说这个功能在前后端分离的时候应该不怎么用的上,基本到现在我还是没遇到过有这样的需求,不过也是一种方法就是.th:href="@{/{role}/l ...
- Synchronized和ReentranLock的区别
1.底层实现上来说? Synchronized是JVM层面的锁,是Java关键字,通过monitor对象来完成. ReentranLock是API层面的锁底层使用AQS. 2.是否可手动释放锁? sy ...
- 在docker安装tomcat的时候,报错:Caused by: java.lang.IllegalArgumentException: The AJP Connector is configured with secretRequired="true
初识docker,试着在docker中安装tomcat(安装的tomcat8.5),并且挂载到宿主机的相关目录下,结果启动的时候报错: 12-May-2020 01:14:34.061 SEVERE ...
- Azkaban入门(启动一个Simple Example)
Azkaban简介 azkaban是一个开源的任务调度系统 Azkaban是一套简单的任务调度服务,整体包括三部分webserver.dbserver.executorserver. 开发语言为Jav ...
- java 的内存结构
Java内存结构详解 Java把内存分成:栈内存,堆内存,方法区,本地方法区和寄存器等. 下面分别介绍栈内存,堆内存,方法区各自一些特性: 1.栈内存 (1)一些基本类型的变量和对象的引用变量都是在函 ...
- javaWeb常用面试题
JDBC JDBC访问数据库的基本步骤是什么? 加载驱动 通过DriverManager对象获取连接对象Connection 通过连接对象获取会话,有2种方式Statement.PreparedSta ...
- C++11 shared_ptr(智能指针)详解
要确保用 new 动态分配的内存空间在程序的各条执行路径都能被释放是一件麻烦的事情.C++ 11 模板库的 <memory> 头文件中定义的智能指针,即 shared _ptr 模板,就是 ...