silverlight翻转代码
using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace slapp002{ public enum enumDirection { Up, Down, Left, Right }; public class cShow3DPlane { public cShow3DPlane() { m_IsMoveOverIn = true; m_IsMoveOverOut = true; m_MoveSpeed = 2; sbTimeIn = new Storyboard(); sbTimeOut = new Storyboard(); SetTime(10, 10); sbTimeIn.Completed += new EventHandler(sbTimeIn_Completed); sbTimeOut.Completed += new EventHandler(sbTimeOut_Completed); } private int m_TimeSpeed1, m_TimeSpeed2, m_MoveSpeed, m_PlaneSpeed, m_InEnd, m_OutEnd; private double m_InLocalZ, m_OutLocalZ; private PlaneProjection m_pInPlane, m_pOutPlane; private Storyboard sbTimeIn, sbTimeOut; private enumDirection m_Direction; private bool m_IsMoveOverIn, m_IsMoveOverOut; //根据方向初始化两个planeProjection的相关值 private void InitPlaneData() { m_pInPlane.RotationX = 0; m_pInPlane.RotationY = 0; m_pInPlane.RotationZ = 0; m_pInPlane.CenterOfRotationX = 0.5; m_pInPlane.CenterOfRotationY = 0.5; m_pInPlane.CenterOfRotationZ = 0; m_pOutPlane.RotationX = 0; m_pOutPlane.RotationY = 0; m_pOutPlane.RotationZ = 0; m_pOutPlane.CenterOfRotationX = 0.5; m_pOutPlane.CenterOfRotationY = 0.5; m_pOutPlane.CenterOfRotationZ = 0; m_pOutPlane.LocalOffsetZ = m_OutLocalZ; m_pOutPlane.GlobalOffsetZ = -m_OutLocalZ; m_pInPlane.LocalOffsetZ = m_InLocalZ; m_pInPlane.GlobalOffsetZ = -m_InLocalZ; switch (m_Direction) { case enumDirection.Up: m_pInPlane.RotationX = -90; m_InEnd = 0; m_pOutPlane.RotationX = 0; m_OutEnd = 90; m_PlaneSpeed = m_MoveSpeed; break; case enumDirection.Down: m_pInPlane.RotationX = 90; m_InEnd = 0; m_pOutPlane.RotationX = 0; m_OutEnd = -90; m_PlaneSpeed = -m_MoveSpeed; break; case enumDirection.Left: m_pInPlane.RotationY = 90; m_InEnd = 0; m_pOutPlane.RotationY = 0; m_OutEnd = -90; m_PlaneSpeed = -m_MoveSpeed; break; case enumDirection.Right: m_pInPlane.RotationY = -90; m_InEnd = 0; m_pOutPlane.RotationY = 0; m_OutEnd = 90; m_PlaneSpeed = m_MoveSpeed; break; } } public void Begin() { m_IsMoveOverIn = false; m_IsMoveOverOut = false; sbTimeIn.Begin(); sbTimeOut.Begin(); } //设置进入和离开对象 public void SetInOutPlane(Grid gridIn, Grid gridOut, enumDirection eDirection) { m_pInPlane = new PlaneProjection(); m_pOutPlane = new PlaneProjection(); gridIn.Projection = m_pInPlane; gridOut.Projection = m_pOutPlane; if (eDirection == enumDirection.Left || eDirection == enumDirection.Right) { m_InLocalZ = gridIn.ActualWidth / 2; m_OutLocalZ = gridOut.ActualWidth / 2; } else { m_InLocalZ = gridIn.ActualHeight / 2; m_OutLocalZ = gridOut.ActualHeight / 2; } m_Direction = eDirection; InitPlaneData(); } //重载 public void SetInOutPlane(System.Windows.Controls.Control controlIn, System.Windows.Controls.Control controlOut, enumDirection eDirection) { m_pInPlane = new PlaneProjection(); m_pOutPlane = new PlaneProjection(); controlIn.Projection = m_pInPlane; controlOut.Projection = m_pOutPlane; if (eDirection == enumDirection.Left || eDirection == enumDirection.Right) { m_InLocalZ = controlIn.ActualWidth / 2; m_OutLocalZ = controlOut.ActualWidth / 2; } else { m_InLocalZ = controlIn.ActualHeight / 2; m_OutLocalZ = controlOut.ActualHeight / 2; } m_Direction = eDirection; InitPlaneData(); } public bool MoveOver() { if (!m_IsMoveOverIn || !m_IsMoveOverOut) return false; else return true; } //设置进入和离开动画的速度 public void SetTime(int timeSpeed1, int timeSpeed2) { m_TimeSpeed1 = timeSpeed1; m_TimeSpeed2 = timeSpeed2; sbTimeIn.Duration = new Duration(TimeSpan.FromMilliseconds(m_TimeSpeed1)); sbTimeOut.Duration = new Duration(TimeSpan.FromMilliseconds(m_TimeSpeed2)); } //离开对象的动画 void sbTimeOut_Completed(object sender, EventArgs e) { //throw new NotImplementedException(); if (m_Direction == enumDirection.Left || m_Direction == enumDirection.Right) { m_pOutPlane.RotationY += m_PlaneSpeed; if (m_pOutPlane.RotationY == m_OutEnd) m_IsMoveOverOut = true; } if (m_Direction == enumDirection.Up || m_Direction == enumDirection.Down) { m_pOutPlane.RotationX += m_PlaneSpeed; if (m_pOutPlane.RotationX == m_OutEnd) m_IsMoveOverOut = true; } if (!m_IsMoveOverOut) sbTimeOut.Begin(); else { m_pOutPlane.LocalOffsetZ = 0; m_pOutPlane.GlobalOffsetZ = 0; } } //进入对象的动画 void sbTimeIn_Completed(object sender, EventArgs e) { //throw new NotImplementedException(); if (m_Direction == enumDirection.Left || m_Direction == enumDirection.Right) { m_pInPlane.RotationY += m_PlaneSpeed; if (m_pInPlane.RotationY == m_InEnd) m_IsMoveOverIn = true; } if (m_Direction == enumDirection.Up || m_Direction == enumDirection.Down) { m_pInPlane.RotationX += m_PlaneSpeed; if (m_pInPlane.RotationX == m_InEnd) m_IsMoveOverIn = true; } if (!m_IsMoveOverIn) sbTimeIn.Begin(); else { m_pInPlane.LocalOffsetZ = 0; m_pInPlane.GlobalOffsetZ = 0; } } }}using System;using System.Collections.Generic;using System.Windows;using System.Windows.Controls;using System.Windows.Controls.DataVisualization.Charting;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace slapp002{public partial class MainPage : UserControl{ private cShow3DPlane c3d = new cShow3DPlane(); private Grid gridCur = new Grid();public MainPage(){// Required to initialize variablesInitializeComponent();}private void rightbt_Click(object sender, System.Windows.RoutedEventArgs e){ if (c3d.MoveOver()) { c3d.SetInOutPlane(linechart, colchart, enumDirection.Right); //gridCur = gridUp; c3d.Begin(); }}private void upbt_Click(object sender, System.Windows.RoutedEventArgs e){ if (c3d.MoveOver()) { c3d.SetInOutPlane(linechart, colchart, enumDirection.Up); //gridCur = gridUp; c3d.Begin(); }}private void leftbt_Click(object sender, System.Windows.RoutedEventArgs e){ if (c3d.MoveOver()) { c3d.SetInOutPlane(linechart, colchart, enumDirection.Left); //gridCur = gridUp; c3d.Begin(); } }private void downbt_Click(object sender, System.Windows.RoutedEventArgs e){ if (c3d.MoveOver()) { c3d.SetInOutPlane(linechart, colchart, enumDirection.Down); //gridCur = gridUp; c3d.Begin(); } }private void UserControl_Loaded(object sender, System.Windows.RoutedEventArgs e){}}}
<UserControlxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:slapp002_Control="clr-namespace:slapp002.Control" xmlns:local="clr-namespace:slapp002" mc:Ignorable="d"x:Class="slapp002.MainPage"Width="640" Height="480" Loaded="UserControl_Loaded"><Grid x:Name="LayoutRoot" Background="White" ><Grid.RowDefinitions><RowDefinition Height="0.152*"/><RowDefinition Height="0.848*"/></Grid.RowDefinitions><Button Content="上" x:Name="upbt" Height="26" Margin="265,8,289,0" VerticalAlignment="Top" Click="upbt_Click"/><Button Content="左" x:Name="leftbt" Margin="162,29,0,18" HorizontalAlignment="Left" Width="86" Click="leftbt_Click"/><Button Content="右" x:Name="rightbt" Margin="0,29,163,18" HorizontalAlignment="Right" Width="86" Click="rightbt_Click"/><Button Content="下" x:Name="downbt" Margin="265,0,289,0" Height="26" VerticalAlignment="Bottom" Click="downbt_Click"/><slapp002_Control:ColumnChartControl Name="colchart" Margin="0,0,0,0" Grid.Row="1"/><local:LineChartControl Margin="0" Name="linechart" Grid.Row="1"/></Grid></UserControl>
页:
[1]