第15章 动画基础(3)——XAML内联计算的实现
来源:互联网 发布:js百叶窗 实现思路 编辑:程序博客网 时间:2024/05/06 11:23
一、XAML内联计算
①定义一个类实现IValueConverter接口
②在窗口资源中导入定义的类
<Window.Resources> <local:ArithmeticConverter x:Key="converter"></local:ArithmeticConverter></Window.Resources>③使用定义的类实现内联计算,如Storyboard的To属性的设置:
To="{Binding ElementName=window,Path=Width,Converter={StaticResource converter},ConverterParameter=-30}"二、实例代码演示
①ArithmeticConverter.cs实现IValueConverter接口
using System;using System.Text.RegularExpressions;using System.Windows;using System.Windows.Data;namespace Animation{ public class ArithmeticConverter : IValueConverter { private const string ArithmeticParseExpression = "([+\\-*/]{1,1})\\s{0,}(\\-?[\\d\\.]+)"; private Regex arithmeticRegex = new Regex(ArithmeticParseExpression); public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is double && parameter != null) { string param = parameter.ToString(); if (param.Length > 0) { Match match = arithmeticRegex.Match(param); if (match != null && match.Groups.Count == 3) { string operation = match.Groups[1].Value.Trim(); string numericValue = match.Groups[2].Value; double number = 0; if (double.TryParse(numericValue, out number)) // this should always succeed or our regex is broken { double valueAsDouble = (double)value; double returnValue = 0; switch (operation) { case "+": returnValue = valueAsDouble + number; break; case "-": returnValue = valueAsDouble - number; break; case "*": returnValue = valueAsDouble * number; break; case "/": returnValue = valueAsDouble / number; break; } return returnValue; } } } } return null; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new Exception("The method or operation is not implemented."); } }}②内联计算的使用
<Window x:Class="Animation.XamlAnimation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="XamlAnimation" Height="300" Width="300" Name="window" xmlns:local="clr-namespace:Animation" > <Window.Resources> <local:ArithmeticConverter x:Key="converter"></local:ArithmeticConverter> </Window.Resources> <Button Padding="10" Name="cmdGrow" Height="40" Width="160" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <EventTrigger.Actions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Width" To="{Binding ElementName=window,Path=Width,Converter={StaticResource converter},ConverterParameter=-30}" Duration="0:0:5"></DoubleAnimation> <DoubleAnimation Storyboard.TargetProperty="Height" To="{Binding ElementName=window,Path=Height,Converter={StaticResource converter},ConverterParameter=-50}" Duration="0:0:5"></DoubleAnimation> </Storyboard> </BeginStoryboard> </EventTrigger.Actions> </EventTrigger> </Button.Triggers> <Button.Content> Click and Make Me Grow </Button.Content> </Button></Window>
0 0
- 第15章 动画基础(3)——XAML内联计算的实现
- 第15章 动画基础(1)——概述、通过代码创建动画和动画的生命周期
- 第15章 动画基础(2)——故事板、触发器
- 动画效果的c#代码实现方式(非xaml代码)
- Win8 Metro风格应用中梯形动画的一种实现方法(C# & XAML)
- XAML概要——XAML对象元素
- XAML 基础
- XAML基础
- XAML 基础
- 深入浅出WPF——XAML的优点
- strcpy的内联实现
- XAML —— 语法
- Silverlight 2 的基础XAML语法学习
- 第27章 WPF和XAML
- Excel 2003 实用基础课程——第6章 计算公式设定
- 第20章 内联汇编
- XAML变形和动画
- XAML 图表动画
- wifi驱动的通用的软件架构
- shiro 单点登录原理 实例
- javascript学习之 function类型 (28)——function类型 this应用
- Vector,ArrayList,LinkedList的异同
- VS2015+opencv3.2的dnn库跑caffe格式例子
- 第15章 动画基础(3)——XAML内联计算的实现
- 阿里云服务器 Centos 安装mysql数据库
- android Canvas 向左上、右上、左下 方向绘制矩形不能跟随手指移动问题
- React-Native痛点解析之开发环境搭建及扩展
- 在macOS搭建React Native for IOS开发环境
- java移位的具体应用
- Redis过期策略 实现原理
- 获得App的包名和启动页Activity
- Android学习之RecyclerView学习(实现瀑布流式布局)