zoukankan      html  css  js  c++  java
  • Silverlight 动画 之 平移

    前台页面:

    View Code
    <UserControl x:Class="SLPianYi.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="600" d:DesignWidth="800">
    
        <Canvas>
            <Rectangle x:Name="rect" Fill="Blue" Height="100" Canvas.Left="103" Stroke="Black" Canvas.Top="112" Width="100">
                <!--<Rectangle.RenderTransform>
                    <CompositeTransform/>
                </Rectangle.RenderTransform>-->
            </Rectangle>
            <Button Content="Button" Canvas.Left="504" Canvas.Top="215" Width="75" Click="Button_Click_1"/>
    
        </Canvas>
    </UserControl>

    后台代码:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace SLPianYi
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
                
            }
    
            private void CreateStoryboary()
            {
                //元素当前所在的坐标点
                Point currentPoint = new Point(Canvas.GetLeft(rect), Canvas.GetTop(rect));         
                //目标点坐标
                Point point = new Point(280, 245);
    
                //为目标控件(rect)添加此属性 (如果前台页面没有此属性的话)
                rect.RenderTransform = new CompositeTransform();
    
                //创建动画容器时间线
                Storyboard storyboard = new Storyboard();
                DoubleAnimation doubleAnimation = new DoubleAnimation();
                
                //创建X轴方向动画
                doubleAnimation.From = currentPoint.X;
                doubleAnimation.To = point.X;
                doubleAnimation.Duration = new Duration(new TimeSpan(0, 0, 1));
                Storyboard.SetTarget(doubleAnimation, rect);
                Storyboard.SetTargetProperty(doubleAnimation,
                    new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));
                storyboard.Children.Add(doubleAnimation);
    
                //创建Y轴方向动画
                doubleAnimation = new DoubleAnimation();
                doubleAnimation.SetValue(DoubleAnimation.FromProperty, currentPoint.Y);
                doubleAnimation.SetValue(DoubleAnimation.ToProperty, point.Y);
                doubleAnimation.SetValue(DoubleAnimation.DurationProperty, new Duration(new TimeSpan(0, 0, 1)));
                Storyboard.SetTarget(doubleAnimation, rect);
                Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)"));
                storyboard.Children.Add(doubleAnimation);
    
                storyboard.Begin();
            }
    
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                CreateStoryboary();
            }
    
        }
    }

    在Blend中需要这样:

    View Code
    <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
        x:Class="SLPianYiDemo.MainPage"
        Width="640" Height="480">
        <UserControl.Resources>
            <Storyboard x:Name="Storyboard1">
                <DoubleAnimation Duration="0:0:0.6" To="280" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="rectangle" d:IsOptimized="True"/>
                <DoubleAnimation Duration="0:0:0.6" To="280" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="rectangle" d:IsOptimized="True"/>
            </Storyboard>
        </UserControl.Resources>
    
        <Grid x:Name="LayoutRoot" Background="White">
            <Rectangle x:Name="rectangle" Fill="#FF1010E2" HorizontalAlignment="Left" Height="76" Margin="61,116,0,0" Stroke="Black" VerticalAlignment="Top" Width="155" RenderTransformOrigin="0.5,0.5">
                <Rectangle.RenderTransform>
                    <CompositeTransform/>
                </Rectangle.RenderTransform>
            </Rectangle>
        </Grid>
    </UserControl>
  • 相关阅读:
    【BZOJ】1045: [HAOI2008]糖果传递(中位数)
    【BZOJ】1011: [HNOI2008]遥远的行星(近似)
    【BZOJ】1034: [ZJOI2008]泡泡堂BNB(贪心)
    【BZOJ】1029: [JSOI2007]建筑抢修(贪心)
    【BZOJ】1022: [SHOI2008]小约翰的游戏John(博弈论)
    【BZOJ】1010: [HNOI2008]玩具装箱toy(dp+斜率优化)
    noip2014滚粗记
    【NOIP模拟题】Permutation(dp+高精度)
    MySQL 关于自定义函数的操作
    MySQL 关于存储过程的操作
  • 原文地址:https://www.cnblogs.com/caok168/p/2687260.html
Copyright © 2011-2022 走看看