当前位置:网站首页 / WPF / 正文

[精品]AY拨云见日-WPF3D-三维中的2d 案例2

时间:2015年04月20日 | 作者 : aaronyang | 分类 : WPF | 浏览: 5243次 | 评论 0

案例效果图:

111.gif

如果对MeshGeometry3D的Positions,TextureCoordinates,TriangleIndices值怎么设置还不理解的,可以回去学习http://www.ayjs.net/post/88.html

三维中的2d, 第一确定一个显示的面就是MeshGeometry3D,通过宽高是 1的倍数来决定大小,z轴一般是0

如果你的想象力是0,你就当z轴是空气吧,例如

Positions="-1,1.5,0, -1,-1.5,0, 2,-1.5,0, 2,1.5,0"

Image 2.png

我不知道每段的长度,我只要知道   倍数关系就ok了,TextureCoordinates,TriangleIndices上篇都专门讲了,这里不赘述了.


第二个固定的一个材质,几乎是定板

   <DiffuseMaterial x:Key="DefaultDiffuseMaterial" Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="Transparent" />

两个确定下来,放入资源中吧,等待使用

这里我新建了WPF应用程序

<Window x:Class="Wpf2015_4_20.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="1000" Width="1600">
    <Window.Resources>
        <MeshGeometry3D  x:Key="geometry"
               Positions="-1,1.5,0, -1,-1.5,0, 2,-1.5,0, 2,1.5,0"
               TextureCoordinates="0,0 0,1 1,1 1,0" 
               TriangleIndices="0 1 2 0 2 3"/>
        <DiffuseMaterial x:Key="DefaultDiffuseMaterial" Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="Transparent" />
    </Window.Resources>
    
    <Grid>
        <Viewport3D RenderOptions.EdgeMode="Aliased" >
            
        </Viewport3D>
    </Grid>
</Window>

RenderOptions.EdgeMode="Aliased" 将非文本绘图基元的边缘呈现为锯齿形边缘,接着放入相机,z轴设置为10,也就是相机距离屏幕有10倍的距离,x和y都是0,表示没有偏移,相机越近,当然看的越大了

     <Viewport3D.Camera>
                <PerspectiveCamera Position="0,0,10"/>
            </Viewport3D.Camera>

如果你做过unity3d开发,目前就好比给你了一个很空旷的场地,任由你去放 3d元素了,接着我们放入灯光,白色的最亮了

    <ModelVisual3D>
                <ModelVisual3D.Content>
                    <AmbientLight Color="White" />
                </ModelVisual3D.Content>
            </ModelVisual3D>

关于2d的内容我们可以在viewport3d外围定义好,因为可以有更好的代码提示,搞好以后在粘贴到Viewport2DVisual3D中去

Image 3.png

由于我们MeshGeometry3D特殊...   x轴左右两侧相加的倍数等于3,y轴1.5+1.5也是3,所以显示出来就是个正方形了,我们稍微修改变成矩形

 Positions="-1,1,0, -1,-1,0, 2.5,-1,0, 2.5,1,0"

Image 6.png

变换相关参数描述

RotateTransform3D 对3D元素旋转

TranslateTransform3D 对3D元素平移

ScaleTransform3D 对3D元素拉伸缩放

Visual3DCollection就是3d元素的集合 Viewport3D.Children

实战

在vs2013中手动,变换生成部分代码

1.gif

关于TranslateTransform3D有个OffsetZ,类似于Panel的zIndex,但是它的是有深度的,我又把MeshGeometry3D的Positions的x距离拉长点,让图片显示的长一点

Positions="-2,1,0 -2,-1,0 2.5,-1,0 2.5,1,0"

接着我们再复制4个Viewport2DVisual3D,然后调整位置显示如下

2.gif

以此类推,完成静态效果

    <Viewport3D RenderOptions.EdgeMode="Unspecified" Width="1200" Height="600">
            <Viewport3D.Camera>
                <PerspectiveCamera Position="0,0,10"/>
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <AmbientLight Color="White" />
                </ModelVisual3D.Content>
            </ModelVisual3D>
            <Viewport2DVisual3D Material="{StaticResource DefaultDiffuseMaterial}" Geometry="{StaticResource geometry}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <ScaleTransform3D  CenterX="0" CenterY="0" CenterZ="0" ScaleZ="1" ScaleY="1" ScaleX="1"/>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="30"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D  OffsetZ="0" OffsetX="0" OffsetY="0"/>
                   
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Border>
                    <Image Source="pack://siteoforigin:,,,/img/228039-106.jpg" />
                </Border>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D Material="{StaticResource DefaultDiffuseMaterial}" Geometry="{StaticResource geometry}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                      
                        <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="30"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetZ="-4" OffsetX="-2" OffsetY="1.2"/>
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Border>
                    <Image Source="pack://siteoforigin:,,,/img/228535-105.jpg" />
                </Border>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D Material="{StaticResource DefaultDiffuseMaterial}" Geometry="{StaticResource geometry}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>

                        <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
                        <RotateTransform3D >
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="30"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetZ="-8" OffsetX="-4" OffsetY="1.3"/>
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Border>
                    <Image Source="pack://siteoforigin:,,,/img/45611-106.jpg" />
                </Border>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D Material="{StaticResource DefaultDiffuseMaterial}" Geometry="{StaticResource geometry}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>

                        <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="30"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetZ="-12" OffsetX="-6" OffsetY="1.2"/>
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Border>
                    <Image Source="pack://siteoforigin:,,,/img/59733-106.jpg" />
                </Border>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D Material="{StaticResource DefaultDiffuseMaterial}" Geometry="{StaticResource geometry}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>

                        <ScaleTransform3D ScaleZ="1" ScaleY="1" ScaleX="1"/>
                        <RotateTransform3D>
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="30"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetZ="-16" OffsetX="-8" OffsetY="1"/>
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Border>
                    <Image Source="pack://siteoforigin:,,,/img/81573-106.jpg" />
                </Border>
            </Viewport2DVisual3D>
        </Viewport3D>

效果图:

Image 7.png

接下来我们在后台让他们动起来,这里我们就简单移动一下显示的层次吧

这里就是更改 TranslateTransform3D的值,这里就简单写下了

思路:

如果是下一个图片,那么 第一个隐藏,然后插到集合模型的最后一个位置,其他向前应用新的TranslateTransform3D值,也就是当前位置应该有的TranslateTransform3D即可.

注意:前台的灯光也算是Model3D,我们把它移到Viewport2DVisual3D最后一个,不然它没有TranslateTransform3D属性,转换会报错的.但是你也可以判断下.如果空就不转换

后台代码:

using System;
using System.Collections.Generic;
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;
using System.Windows.Media.Media3D;
using System.Windows.Media.Animation;

namespace Aero
{
    /// <summary>
    /// Window1.xaml 的交互逻辑
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        public void MoveCurrentToNext()
        {
            //向前移动,取Viewport3D的第一个Viewport2DVisual3为当前Viewport2DVisual3D
            var current = this.Viewport3D.Children[0];
            var child1 = this.Viewport3D.Children[1];
            var child2 = this.Viewport3D.Children[2];
            var child3 = this.Viewport3D.Children[3];
            var child4 = this.Viewport3D.Children[4];
            var child5 = this.Viewport3D.Children[5];


            this.Viewport3D.Children.RemoveAt(0);
            this.Viewport3D.Children.Insert(5, current);

            var translate = (current.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;

            //对每个Viewport2DVisual3D元素应用平移动画
            AnimationVisualElement((current as Viewport2DVisual3D).Visual as FrameworkElement, .3);
            AnimationVisualElement(translate, true, -5.0, 1.5, -20.0);

            translate = (child1.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, true, .0, .0, .0);

            translate = (child2.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, true, -1.0, 1.0, -4.0);

            translate = (child3.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, true, -2.0, 1.5, -8.0);

            translate = (child4.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, true, -3.0, 1.5, -12.0);

            translate = (child5.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, true, -4.0, 1.5, -16.0);

        }

        public void MoveCurrentToPrevious()
        {
            //向后移动,取Viewport3D的最后一个Viewport2DVisual3D当前Viewport2DVisual3D
            var current = this.Viewport3D.Children[5];
            var child1 = this.Viewport3D.Children[0];
            var child2 = this.Viewport3D.Children[1];
            var child3 = this.Viewport3D.Children[2];
            var child4 = this.Viewport3D.Children[3];
            var child5 = this.Viewport3D.Children[4];

            this.Viewport3D.Children.RemoveAt(5);
            this.Viewport3D.Children.Insert(0, current);

            var translate = (current.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;

            //AnimationVisualElement((current as Viewport2DVisual3D).Visual as FrameworkElement,.4);
            AnimationVisualElement(translate, false, 0.0, 0.0, 0.0);

            translate = (child1.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, false, -1.0, 1.0, -4.0);

            translate = (child2.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, false, -2.0, 1.5, -8.0);

            translate = (child3.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, false, -3.0, 1.5, -12.0);

            translate = (child4.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, false, -4.0, 1.5, -16.0);

            translate = (child5.Transform as Transform3DGroup).Children[1] as TranslateTransform3D;
            AnimationVisualElement(translate, false, -5.0, 1.5, -20.0);
        }
        private void AnimationVisualElement(FrameworkElement element, double duration)
        {
            if (element == null)
                return;
            //对Visual元素的Visibility应用动画
            ObjectAnimationUsingKeyFrames objectAnimation = new ObjectAnimationUsingKeyFrames();
            objectAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame(Visibility.Collapsed, KeyTime.FromPercent(.0)));
            objectAnimation.KeyFrames.Add(new DiscreteObjectKeyFrame(Visibility.Visible, KeyTime.FromPercent(1)));
            objectAnimation.Duration = TimeSpan.FromSeconds(duration);
            objectAnimation.FillBehavior = FillBehavior.Stop;
            element.BeginAnimation(FrameworkElement.VisibilityProperty, objectAnimation);

        }
        private void AnimationVisualElement(TranslateTransform3D translate, bool forward, double targetX, double targetY, double targetZ)
        {
            Duration duration = new Duration(TimeSpan.FromSeconds(.4));
            //对TranslateTransform3D的X偏移量应用动画
            DoubleAnimation animationX = new DoubleAnimation();
            animationX.To = targetX;
            animationX.Duration = duration;
            animationX.AccelerationRatio = forward ? 0 : 1;
            animationX.DecelerationRatio = forward ? 1 : 0;
            translate.BeginAnimation(TranslateTransform3D.OffsetXProperty, animationX);
            //对TranslateTransform3D的Y偏移量应用动画
            DoubleAnimation animationY = new DoubleAnimation();
            animationX.To = targetY;
            animationX.AccelerationRatio = forward ? 0.7 : 0.3;
            animationX.DecelerationRatio = forward ? 0.3 : 0.7;
            animationX.Duration = duration;
            translate.BeginAnimation(TranslateTransform3D.OffsetYProperty, animationX);
            //对TranslateTransform3D的Z偏移量应用动画
            DoubleAnimation animationZ = new DoubleAnimation();
            animationZ.To = targetZ;
            animationZ.AccelerationRatio = forward ? 0.3 : 0.7;
            animationZ.DecelerationRatio = forward ? 0.7 : 0.3;
            animationZ.Duration = duration;
            translate.BeginAnimation(TranslateTransform3D.OffsetZProperty, animationZ);
        }

       
        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyStates == Keyboard.GetKeyStates(Key.Down) && Keyboard.Modifiers == ModifierKeys.Control)
            {
                //向前移动Visual元素
                this.MoveCurrentToNext();
            }
            else if (e.KeyStates == Keyboard.GetKeyStates(Key.Up) && Keyboard.Modifiers == ModifierKeys.Control)
            {
                //向后移动Visual元素
                this.MoveCurrentToPrevious();
            }
            else if (e.KeyStates == Keyboard.GetKeyStates(Key.Escape))
            {
                //注销
                Application.Current.Shutdown();
            }
        }
    }
}

前台代码:

<Window x:Class="Aero.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" WindowStartupLocation="CenterScreen"  WindowStyle="None"
        WindowState="Maximized" Width="1000" Height="800" KeyDown="Window_KeyDown">
    <Window.Background>
        <ImageBrush ImageSource="Images\default.jpg"/>
    </Window.Background>
    <Window.Resources>
        <MeshGeometry3D  x:Key="geometry"
               Positions="-1,1.2,0, -1,-1.2,0, 3,-1.2,0, 3,1.2,0"
               TextureCoordinates="0,0 0,1 1,1 1,0" 
               TriangleIndices="0 1 2 0 2 3"/>
        <DiffuseMaterial x:Key="material" Viewport2DVisual3D.IsVisualHostMaterial="True" Brush="Transparent" />
    </Window.Resources>
    <Grid>
        <Viewport3D  x:Name="Viewport3D" RenderOptions.EdgeMode="Aliased" ClipToBounds="False" IsHitTestVisible="False">
            <Viewport3D.Camera>
                <PerspectiveCamera Position="0,0,8"  />
            </Viewport3D.Camera>
            <Viewport2DVisual3D x:Name="viewport2DVisual3D0" Geometry="{StaticResource geometry}"  Material="{StaticResource material}" >
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="35"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetX="0" OffsetY="0" OffsetZ="0"/>
                        <ScaleTransform3D CenterX="0" CenterY="0" CenterZ="0" ScaleX="1.5" ScaleY="1" />
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Viewport2DVisual3D.Visual>
                    <Image Source="Images\051027nature01.jpg" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Viewport2DVisual3D.Visual>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D x:Name="viewport2DVisual3D1" Geometry="{StaticResource geometry}" Material="{StaticResource material}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="35"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetX="-1" OffsetY="1" OffsetZ="-4"/>
                        <ScaleTransform3D CenterX="0" CenterY="0" CenterZ="0" ScaleX="1.5" ScaleY="1" />
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Viewport2DVisual3D.Visual>
                    <Image Source="Images\051027nature02.jpg" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Viewport2DVisual3D.Visual>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D x:Name="viewport2DVisual3D2" Geometry="{StaticResource geometry}" Material="{StaticResource material}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="35"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetX="-2" OffsetY="1.5" OffsetZ="-8"/>
                        <ScaleTransform3D CenterX="0" CenterY="0" CenterZ="0" ScaleX="1.5" ScaleY="1" />
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Viewport2DVisual3D.Visual>
                    <Image Source="Images\11550549.jpg" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Viewport2DVisual3D.Visual>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D x:Name="viewport2DVisual3D3" Geometry="{StaticResource geometry}" Material="{StaticResource material}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="35"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetX="-3" OffsetY="1.5" OffsetZ="-12"/>
                        <ScaleTransform3D CenterX="0" CenterY="0" CenterZ="0" ScaleX="1.5" ScaleY="1" />
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Viewport2DVisual3D.Visual>
                    <Image Source="Images\11550556.jpg" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Viewport2DVisual3D.Visual>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D x:Name="viewport2DVisual3D4" Geometry="{StaticResource geometry}" Material="{StaticResource material}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="35"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetX="-4" OffsetY="1.5" OffsetZ="-16"/>
                        <ScaleTransform3D CenterX="0" CenterY="0" CenterZ="0" ScaleX="1.5" ScaleY="1" />
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Viewport2DVisual3D.Visual>
                    <Image Source="Images\11550560.jpg" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Viewport2DVisual3D.Visual>
            </Viewport2DVisual3D>
            <Viewport2DVisual3D x:Name="viewport2DVisual3D5" Geometry="{StaticResource geometry}" Material="{StaticResource material}">
                <Viewport2DVisual3D.Transform>
                    <Transform3DGroup>
                        <RotateTransform3D CenterX="0" CenterY="0" CenterZ="0">
                            <RotateTransform3D.Rotation>
                                <AxisAngleRotation3D Axis="0,1,0" Angle="35"/>
                            </RotateTransform3D.Rotation>
                        </RotateTransform3D>
                        <TranslateTransform3D OffsetX="-5" OffsetY="1.5" OffsetZ="-20"/>
                        <ScaleTransform3D CenterX="0" CenterY="0" CenterZ="0" ScaleX="1.5" ScaleY="1" />
                    </Transform3DGroup>
                </Viewport2DVisual3D.Transform>
                <Viewport2DVisual3D.Visual>
                    <Image Source="Images\051123Webshots05.jpg" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                </Viewport2DVisual3D.Visual>
            </Viewport2DVisual3D>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <AmbientLight Color="White" />
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Grid>
</Window>

好了,今天先讲到这里了.






推荐您阅读更多有关于“WPF4.5,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf,目前主maui

招聘合肥一枚WPF工程师,跟我一个开发组,10-15K,欢迎打扰

目前在合肥市企迈科技就职

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表