WPF旋转的界面实现

简介: 原文:WPF旋转的界面实现 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangyisen0713/article/details/18215349 在WPF中可以做出旋转的界面,这样不仅效果好看,而且节省界面和代码处理。
原文: WPF旋转的界面实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangyisen0713/article/details/18215349

在WPF中可以做出旋转的界面,这样不仅效果好看,而且节省界面和代码处理。

xaml代码如下:

<Window x:Class="V3ViewApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="旋转界面" Height="360" Width="450" Background="Black" WindowState="Normal" WindowStartupLocation="CenterScreen">
    <Window.Resources>
        <sys:Double x:Key="grdSize">200</sys:Double>
    </Window.Resources>
    <Grid >
        <Viewport3D ClipToBounds="True" HorizontalAlignment="Center" VerticalAlignment="Center" Height="500" Width="500">
            <Viewport3D.Camera>
                <PerspectiveCamera LookDirection="0,0,-1" Position="0,0,300"/>
            </Viewport3D.Camera>
            <Viewport3D.Children>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <AmbientLight Color="Transparent"/>
                    </ModelVisual3D.Content>
                    <ModelVisual3D.Children>

                        <Viewport2DVisual3D>
                            <Viewport2DVisual3D.Geometry>
                                <MeshGeometry3D Positions="-50,50,-50  -50,-50,-50  -50,-50,50  -50,50,50"
                                                Normals="0,0,1  0,0,1  0,0,1  0,0,1"
                                                TriangleIndices="0,1,2  0,2,3"
                                                TextureCoordinates="0,0  0,1  1,1  1,0"/>
                            </Viewport2DVisual3D.Geometry>
                            <Viewport2DVisual3D.Material>
                                <DiffuseMaterial Brush="Transparent" Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                            </Viewport2DVisual3D.Material>
                            <Viewport2DVisual3D.Visual>
                                <Grid Background="Yellow"  Width="{StaticResource grdSize}" Height="{StaticResource grdSize}">
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="auto"/>
                                        <RowDefinition Height="*"/>
                                        <RowDefinition Height="auto"/>
                                    </Grid.RowDefinitions>                                  
                                </Grid>
                            </Viewport2DVisual3D.Visual>
                        </Viewport2DVisual3D>

                        <Viewport2DVisual3D>
                            <Viewport2DVisual3D.Geometry>
                                <MeshGeometry3D Positions="-50,50,50  -50,-50,50  50,-50,50  50,50,50"
                                                Normals="0,0,1  0,0,1  0,0,1  0,0,1"
                                                TriangleIndices="0,1,2  0,2,3"
                                                TextureCoordinates="0,0  0,1  1,1  1,0"/>
                            </Viewport2DVisual3D.Geometry>
                            <Viewport2DVisual3D.Material>
                                <DiffuseMaterial Brush="Transparent" Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                            </Viewport2DVisual3D.Material>
                            <Viewport2DVisual3D.Visual>
                                <Grid Background="Red" Height="{StaticResource grdSize}" Width="{StaticResource grdSize}">
                                    <StackPanel Margin="4">
                      
                                    </StackPanel>
                                </Grid>
                            </Viewport2DVisual3D.Visual>
                        </Viewport2DVisual3D>

                        <Viewport2DVisual3D>
                            <Viewport2DVisual3D.Geometry>
                                <MeshGeometry3D Positions="50,50,50  50,-50,50  50,-50,-50  50,50,-50"
                                                Normals="0,0,1  0,0,1  0,0,1  0,0,1"
                                                TriangleIndices="0,1,2  0,2,3"
                                                TextureCoordinates="0,0  0,1  1,1  1,0"/>
                            </Viewport2DVisual3D.Geometry>
                            <Viewport2DVisual3D.Material>
                                <DiffuseMaterial Brush="Transparent" Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                            </Viewport2DVisual3D.Material>
                            <Viewport2DVisual3D.Visual>
                                <Grid Background="Green" Width="{StaticResource grdSize}" Height="{StaticResource grdSize}">
                                    <Canvas>
                                       <Ellipse />
                                    </Canvas>
                                </Grid>
                            </Viewport2DVisual3D.Visual>
                        </Viewport2DVisual3D>
 
                        <Viewport2DVisual3D>
                            <Viewport2DVisual3D.Geometry>
                                <MeshGeometry3D Positions="50,50,-50  50,-50,-50  -50,-50,-50  -50,50,-50"
                                                Normals="0,0,1  0,0,1  0,0,1  0,0,1"
                                                TriangleIndices="0,1,2  0,2,3"
                                                TextureCoordinates="0,0  0,1  1,1  1,0"/>
                            </Viewport2DVisual3D.Geometry>
                            <Viewport2DVisual3D.Material>
                                <DiffuseMaterial Brush="Transparent" Viewport2DVisual3D.IsVisualHostMaterial="True"/>
                            </Viewport2DVisual3D.Material>
                            <Viewport2DVisual3D.Visual>
                                <Grid Background="Blue" Height="{StaticResource grdSize}" Width="{StaticResource grdSize}">
                  
                                </Grid>
                            </Viewport2DVisual3D.Visual>
                        </Viewport2DVisual3D>
                    </ModelVisual3D.Children>
                    <ModelVisual3D.Transform>
                        <RotateTransform3D  CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Angle="0" Axis="0,1,0" x:Name="ar"/> 
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                    </ModelVisual3D.Transform>
                </ModelVisual3D>
            </Viewport3D.Children>
        </Viewport3D>
    </Grid>
</Window>
CS代码如下:

  public MainWindow()
        {
            InitializeComponent();

            // 设置快捷键
            KeyBinding forwBind = new System.Windows.Input.KeyBinding();
            forwBind.Command = new ForwCommand();
            forwBind.CommandParameter = ar;
            forwBind.Key = System.Windows.Input.Key.Right;
            this.InputBindings.Add(forwBind);
            KeyBinding backBind = new System.Windows.Input.KeyBinding();
            backBind.Command = new BackCommand();
            backBind.CommandParameter = ar;
            backBind.Key = System.Windows.Input.Key.Left;
            this.InputBindings.Add(backBind);

            this.Loaded += (k, k2) =>
                {
                    
                };
        }
    }

    /// <summary>
    /// 向前移动
    /// </summary>
    public class ForwCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            if (parameter == null)
            {
                return false;
            }
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            AxisAngleRotation3D rot = parameter as AxisAngleRotation3D;
            DoubleAnimation d = new DoubleAnimation();
            d.Duration = new Duration(TimeSpan.FromMilliseconds(800));
            d.By = 90d;
            rot.BeginAnimation(AxisAngleRotation3D.AngleProperty, d, HandoffBehavior.Compose);
        }
    }

    /// <summary>
    /// 向后移动
    /// </summary>
    public class BackCommand : ICommand
    {
        public bool CanExecute(object parameter)
        {
            if (parameter == null)
            {
                return false;
            }
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            AxisAngleRotation3D rot = parameter as AxisAngleRotation3D;
            DoubleAnimation d = new DoubleAnimation();
            d.By = -90d;
            d.Duration = new Duration(TimeSpan.FromMilliseconds(800));
            rot.BeginAnimation(AxisAngleRotation3D.AngleProperty, d, HandoffBehavior.Compose);
        }
    }

最后用键盘左右键实现界面切换,之后可以自己改成别的快捷键进行切换。

效果如图:



目录
相关文章
|
C#
WPF 界面实现多语言支持 中英文切换 动态加载资源字典
原文:WPF 界面实现多语言支持 中英文切换 动态加载资源字典 1、使用资源字典,首先新建两个字典文件en-us.xaml、zh-cn.xaml。定义中英文的字符串在这里面【注意:添加xmlns:s="clr-namespace:System;assembly=mscorlib】 zh-cn.
2934 0
|
10月前
|
C#
WPF做登陆界面
WPF做登陆界面
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
前端开发 C#
WPF MVVM 如何在 ViewModel 中关闭界面窗口
WPF MVVM 如何在 ViewModel 中关闭界面窗口
WPF界面异常:未将对象引用设置到对象实例
WPF界面异常:未将对象引用设置到对象实例
|
XML C# 数据格式
Wix 安装部署教程(九) --用WPF做安装界面
原文:Wix 安装部署教程(九) --用WPF做安装界面       经常安装PC端的应用,特别是重装系统之后,大致分为两类。一类像QQ,搜狗输入法这样的。分三步走的:第一个页面可以自定义安装路径和软件许可。
1567 0
|
IDE C# 开发工具
WPF钟表效果实现
中WPF中的RotateTransform实现UI元素的旋转,并模拟钟表的秒针、分针和时针。
1136 0
WPF钟表效果实现
|
IDE 编译器 C#
WPF实现强大的动态公式计算
数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题。本文就探讨一下如何在WPF中实现一种基于行字段的动态公式计算。
997 0
WPF实现强大的动态公式计算
|
网络协议 C# 移动开发
C# WPF上位机实现和下位机TCP通讯
C# WPF上位机实现和下位机TCP通讯下位机使用北京大华程控电源DH1766-1,上位机使用WPF。实现了电压电流实时采集,曲线显示。上午在公司调试成功,手头没有程控电源,使用TCP服务端模拟。昨天写的TCP服务端正好排上用场。
2341 0
|
前端开发 C#
准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题
原文:准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题 题外话     不出意外,本片内容应该是最后一篇关于.Net技术的博客,做.Net的伙伴们忽喷忽喷。.Net挺好的,微软最近在跨平台方面搞的水深火热,更新也比较频繁,而且博客园的很多大牛也写的有跨平台相关技术的博客。
1205 0