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控件如此简单的一个原因是不涉及状 ...
随机推荐
- TestNG注释@BeforeGroups与@AfterGroups不执行的处理
在学习TestNG框架注解时发现在执行以下的代码 package com.groups; import org.testng.annotations.AfterGroups; import org.t ...
- 快速从SQL语法过度到Elasticsearch的DSL语法
目录 前言 bool-相当于一个括号 should-相当于or must-相当于and must_not-相当于 ! and term-相当于= terms-相当于in between-相当于rang ...
- JavaWeb项目实战-油画商城
整个项目都已经上传到github-mmgallery上,供有需要的读者使用,主要文件来自于csdn,区别是csdn中的项目数据存储在MySQL中,本项目数据存储在Xml文件中.课件和学习视频课程来自M ...
- SpringBoot 整合缓存Cacheable实战详细使用
前言 我知道在接口api项目中,频繁的调用接口获取数据,查询数据库是非常耗费资源的,于是就有了缓存技术,可以把一些不常更新,或者经常使用的数据,缓存起来,然后下次再请求时候,就直接从缓存中获取,不需要 ...
- windows中抓取hash小结(上)
我上篇随笔说到了内网中横向移动的几种姿势,横向移动的前提是获取了具有某些权限的用户的明文密码或hash,正愁不知道写点啥,那就来整理一下这个"前提"-----如何在windows系 ...
- NOIP 模拟 $33\; \rm Hunter$
题解 \(by\;zj\varphi\) 结论题. 对于 \(1\) 猎人,他死的期望就是有多少个死在它前面. 那么对于一个猎人,它死在 \(1\) 前的概率就是 \(\frac{w_i}{w_i+w ...
- 题解 matrix
传送门 无比毒瘤的dp题,而且伪装地好像很可做的样子 考场上我给它氪了差不多一个小时最后还是只能扔了个20pts状压走人 以下思路基本均来源于题解: 对于此题,题面中三个限制条件: (1)第 i 行第 ...
- CF1264D2 Beautiful Bracket Sequence
我们枚举每两个字符的空档,统计一个空档左边有 \(l\) 个左括号, 右边有 \(r\) 个右括号,左边有 \(u\) 个问号,右边有 \(v\) 个问号. 则对于 \(p\) 的答案 \(ans_p ...
- HCNP Routing&Switching之OSPF网络类型
前文我们了解了PPPoE协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15182512.html:今天我们聊聊一聊OSPF中的网络类型相关话题: ...
- 【mysql】索引优化分析
1. 索引的概念 1.1 索引是什么 MySQL 官方对索引的定义为:索引(Index)是帮助MySQL 高效获取数据的数据结构.可以得到索引的本质:索引是数据结构.可以简单理解为排好序的快速查找数据 ...