WPF数字滚动效果
和WPF数字滚动抽奖有区别,WPF数字滚动抽奖是随机的,而这里是确定的。
为了系统演示,这个效果通宵加班写了整整6个小时,中间就上了次厕所。
代码:
RollingNumberItemCtrl.xaml代码:
<UserControl x:Class="SunCreate.Common.Controls.RollingNumberCtrl"
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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:local="clr-namespace:SunCreate.Common.Controls"
d:DesignHeight="30" d:DesignWidth="300" Loaded="UserControl_Loaded">
<Grid>
<StackPanel x:Name="stackPanel" Orientation="Horizontal" >
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<Border x:Name="separator2" Height="30" Width="18" Visibility="Collapsed">
<TextBlock FontSize="30" Text="," VerticalAlignment="Bottom" HorizontalAlignment="Center" ></TextBlock>
</Border>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<Border x:Name="separator1" Height="30" Width="18" Visibility="Collapsed">
<TextBlock FontSize="30" Text="," VerticalAlignment="Bottom" HorizontalAlignment="Center" ></TextBlock>
</Border>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0"></local:RollingNumberItemCtrl>
</StackPanel>
</Grid>
</UserControl>
RollingNumberItemCtrl.xaml.cs代码:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
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 SunCreate.Common.Controls
{
/// <summary>
/// MyTextBlock.xaml 的交互逻辑
/// </summary>
public partial class RollingNumberCtrl : INotifyPropertyChanged
{
private bool _firstLoaded = true; public double ItemHeight
{
get { return (double)this.GetValue(RollingNumberCtrl.ItemHeightProperty); }
set
{ this.SetValue(RollingNumberCtrl.ItemHeightProperty, value); }
}
private static DependencyProperty ItemHeightProperty = DependencyProperty.Register("ItemHeight", typeof(double), typeof(RollingNumberCtrl)); public string NumStr
{
get { return (string)this.GetValue(RollingNumberCtrl.NumStrProperty); }
set
{ this.SetValue(RollingNumberCtrl.NumStrProperty, value); }
}
private static DependencyProperty NumStrProperty = DependencyProperty.Register("NumStr", typeof(string), typeof(RollingNumberCtrl), new PropertyMetadata(null, new PropertyChangedCallback(NumStrChanged))); public bool ShowSeparator
{
get { return (bool)this.GetValue(RollingNumberCtrl.ShowSeparatorProperty); }
set
{ this.SetValue(RollingNumberCtrl.ShowSeparatorProperty, value); }
}
private static DependencyProperty ShowSeparatorProperty = DependencyProperty.Register("ShowSeparator", typeof(bool), typeof(RollingNumberCtrl)); private static void NumStrChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
(sender as RollingNumberCtrl).UpdateNumStr((sender as RollingNumberCtrl).NumStr);
} private void UpdateNumStr(string numStr)
{
Text = numStr;
if (numStr.Length > && ShowSeparator) separator1.Visibility = Visibility.Visible;
if (numStr.Length > && ShowSeparator) separator2.Visibility = Visibility.Visible;
} private string _Text;
/// <summary>
/// 文本
/// </summary>
public string Text
{
get { return _Text; }
set
{
_Text = value;
OnPropertyChanged("Text"); if (!_firstLoaded)
{
List<RollingNumberItemCtrl> numCtrlList = new List<RollingNumberItemCtrl>();
foreach (FrameworkElement element in stackPanel.Children)
{
if (element is RollingNumberItemCtrl)
{
RollingNumberItemCtrl num = element as RollingNumberItemCtrl;
numCtrlList.Add(num);
}
} RollingNumberItemCtrl[] numArr = new RollingNumberItemCtrl[numCtrlList.Count];
int index = ;
foreach (RollingNumberItemCtrl num in numCtrlList)
{
numArr[numArr.Length - index++] = num;
} if (_Text != null)
{
int i = ;
foreach (char c in _Text.Reverse())
{
double d = Convert.ToInt32(c - ); ; numArr[i++].Num = d;
}
for (int k = ; k < i; k++)
{
numArr[k].Visibility = Visibility.Visible;
}
for (int k = i; k < numArr.Length; k++)
{
numArr[k].Visibility = Visibility.Collapsed;
}
}
}
}
} public RollingNumberCtrl()
{
InitializeComponent();
} #region INotifyPropertyChanged接口
public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (_firstLoaded) _firstLoaded = false; foreach (FrameworkElement element in stackPanel.Children)
{
element.Height = this.ItemHeight;
element.Width = this.ItemHeight * 0.6; if (element is RollingNumberItemCtrl)
{
RollingNumberItemCtrl num = element as RollingNumberItemCtrl;
num.FontWeight = this.FontWeight;
} if (element is Border)
{
Border border = element as Border;
TextBlock txt = border.Child as TextBlock;
txt.FontSize = this.ItemHeight;
txt.FontWeight = this.FontWeight;
}
} Text = NumStr;
} }
}
RollingNumberCtrl.xaml代码:
<UserControl x:Class="SunCreate.Common.Controls.RollingNumberCtrl"
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"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:local="clr-namespace:SunCreate.Common.Controls"
d:DesignHeight="30" d:DesignWidth="300" Loaded="UserControl_Loaded">
<Grid>
<StackPanel x:Name="stackPanel" Orientation="Horizontal" >
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0" Visibility="Collapsed"></local:RollingNumberItemCtrl>
<local:RollingNumberItemCtrl Height="30" Width="18" Num="0"></local:RollingNumberItemCtrl>
</StackPanel>
</Grid>
</UserControl>
RollingNumberCtrl.xaml.cs代码:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
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 SunCreate.Common.Controls
{
/// <summary>
/// MyTextBlock.xaml 的交互逻辑
/// </summary>
public partial class RollingNumberCtrl : INotifyPropertyChanged
{
private bool _firstLoaded = true; public double ItemHeight
{
get { return (double)this.GetValue(RollingNumberCtrl.ItemHeightProperty); }
set
{ this.SetValue(RollingNumberCtrl.ItemHeightProperty, value); }
}
private static DependencyProperty ItemHeightProperty = DependencyProperty.Register("ItemHeight", typeof(double), typeof(RollingNumberCtrl)); public string NumStr
{
get { return (string)this.GetValue(RollingNumberCtrl.NumStrProperty); }
set
{ this.SetValue(RollingNumberCtrl.NumStrProperty, value); }
}
private static DependencyProperty NumStrProperty = DependencyProperty.Register("NumStr", typeof(string), typeof(RollingNumberCtrl), new PropertyMetadata(null, new PropertyChangedCallback(NumStrChanged))); private static void NumStrChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
(sender as RollingNumberCtrl).UpdateNumStr((sender as RollingNumberCtrl).NumStr);
} private void UpdateNumStr(string numStr)
{
Text = numStr;
} private string _Text;
/// <summary>
/// 文本
/// </summary>
public string Text
{
get { return _Text; }
set
{
_Text = value;
OnPropertyChanged("Text"); if (!_firstLoaded)
{
RollingNumberItemCtrl[] numArr = new RollingNumberItemCtrl[stackPanel.Children.Count];
int index = ;
foreach (RollingNumberItemCtrl num in stackPanel.Children)
{
numArr[numArr.Length - index++] = num;
} if (_Text != null)
{
int i = ;
foreach (char c in _Text.Reverse())
{
double d = Convert.ToInt32(c - ); ; numArr[i++].Num = d;
}
for (int k = ; k < i; k++)
{
numArr[k].Visibility = Visibility.Visible;
}
for (int k = i; k < numArr.Length; k++)
{
numArr[k].Visibility = Visibility.Collapsed;
}
}
}
}
} public RollingNumberCtrl()
{
InitializeComponent();
} #region INotifyPropertyChanged接口
public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#endregion private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
if (_firstLoaded) _firstLoaded = false; foreach (RollingNumberItemCtrl num in stackPanel.Children)
{
num.Height = this.ItemHeight;
num.Width = this.ItemHeight * 0.6;
num.FontWeight = this.FontWeight;
} Text = NumStr;
} }
}
如何使用:
<controls:RollingNumberCtrl Margin="0 2 0 0" ItemHeight="20" NumStr="{Binding CarInOut}" Foreground="#fff" FontSize="20" FontWeight="Bold" ></controls:RollingNumberCtrl>
效果图:
WPF数字滚动效果的更多相关文章
- 采用cocos2d-x lua 制作数字滚动效果样例
require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...
- Wpf自动滚动效果
一.思路 1.使用ScrollView的Scroll.ScrollToVerticalOffset(offset)方法进行滚动 2.ScrollView中放置2个ListView,第一个滚动出边界后, ...
- WPF 文本滚动效果 渐变效果
<DockPanel> <StackPanel DockPanel.Dock="Bottom" VerticalAlignment="Bottom&qu ...
- 用jQuery实现数字滚动效果
html 部分 <div class="js-box box"></div> css 部分 .statistic .box{ display: inline ...
- ajax异步请求获取数据,实现滚动数字的效果。
BackgroundPositionAnimate.js下载 需要导入的js: <script type="text/javascript" src="js/jqu ...
- Vue.js大屏数字滚动翻转效果
================================ 大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最 ...
- 让数字变化炫酷起来,数字滚动Text组件[Unity]
让数字滚动起来 上周我的策划又提了样需求,当玩家评分发生变动时,屏幕出现人物评分浮层UI,播放评分数字滚动动画.这类数字滚动需求非常常见,我就按一般思路,将startvalue与endvalue每隔一 ...
- jQuery数字滚动(模拟网站人气、访问量递增)原创
插件描述:实现数字上下滚动,模拟网站人气.访问量递增的动画效果,兼容性如下: 使用方法 $(el).runNum(val,params); 参数详解 val:数值型(默认70225800): pa ...
- JS图片自动或者手动滚动效果(支持left或者up)
JS图片自动或者手动滚动效果(支持left或者up) JS图片自动或者手动滚动效果 在谈组件之前 来谈谈今天遇到搞笑的事情,今天上午接到一个杭州电话 0571-28001187 即说是杭州人民法院的 ...
随机推荐
- Maven CXF wsdl2Java String生成JAXBElement<Xxx> 解决方法
添加要bindingFile的jaxb配置文件,如下: <jaxb:bindings version="2.1" xmlns:jaxb="http://java.s ...
- 6. 添加messager.alert()确定按钮的回调函数,即点完确定按钮后触发的事件
添加messager.alert()确定按钮的回调函数,即点完确定按钮后触发的事件: $.messager.alert('提示信息', "请联系管理员处理!", 'info', f ...
- 游戏搭服自动化脚本shell
#!/bin/bash #;g=6006c= 178pop_s10 rm-bp1gy2r82o607w4v8.mysql.rds.aliyuncs.com # basedir=/data/jzadmi ...
- C# 调用程序集方法
加载程序集 (Assembly类) 使用 Assembly 类可以加载程序集.浏览程序集的元数据和构成部分.发现程序集中包含的类型以及创建这些类型的实例 // 加载该路径的程序集 Assembly a ...
- .net core 微服务之日志落盘设计
原文:.net core 微服务之日志落盘设计 目录 1.设计目标 2.日志流程 3.串联请求事务 3.1 请求ID 3.2 处理服务器.服务 3.3 处理接口名 3.4 日志的发生时间 3.5 接口 ...
- IDEA使用SpringBoot 、maven创建微服务的简单过程
使用IDEA新建一个简单的微服务 1. 打开IDEA,File -> New -> project 打开如下图1-1所示的对话框 图 1-1 2.点击"Next"按钮 ...
- week07 13.3 NewsPipeline之 三News Deduper之 tf_idf 查重
我们运行看结果 安装包sklearn 安装numpy 安装scipy 终于可以啦 我们把安装的包都写在文件里面吧 4行4列 轴对称 只需要看一半就可以 横着看 竖着看都行 数值越接近1 表示越相似 我 ...
- actuator/hystrix.stream 没有反应的方法
http://localhost:8086/actuator/hystrix.stream 在启动类加上,就ok了 @Bean public ServletRegistrationBean hystr ...
- 求树的重心 poj 1655
题目链接:https://vjudge.net/problem/POJ-1655 这个就是找树的重心,树的重心就是树里面找一个点,使得以这个点为树根的所有的子树中最大的子树节点数最小.题目应该讲的比较 ...
- vue 兼容性——ie家族不支持promise
解决方案: 安装: cnpm install es6-promise 在 main.js 引入 : polyfill require("es6-promise").polyfill ...