原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示

为方便描述, 这里仅以正方形来做演示, 其他图形从略。

运行时效果图:


XAML代码:
// Transform.XAML

<Canvas Width="700" Height="700" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <Canvas.Resources>
            <DrawingBrush x:Key="MyGridBrushResource" Viewport="0,0,100,100" ViewportUnits="Absolute" TileMode="Tile">
                <DrawingBrush.Drawing>
                    <DrawingGroup>
                        <DrawingGroup.Children>
                            <!--横线-->
                            <GeometryDrawing Geometry="M0,1 L10,1 M0,2 L10,2 M0,3 L10,3 M0,4 L10,4 M0,5 L10,5 M0,6 L10,6 M0,7 L10,7 M0,8 L10,8 M0,9 L10,9">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.1" Brush="#CCCCFF" />
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                            <!-- 横线100整数倍 -->
                            <GeometryDrawing Geometry="M0,0 L10,0">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.1" Brush="DarkOrange" />
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                            <!--竖线-->
                            <GeometryDrawing Geometry="M1,0 L1,10 M2,0 L2,10 M3,0 L3,10 M4,0 L4,10 M5,0 L5,10 M6,0 L6,10 M7,0 L7,10 M8,0 L8,10 M9,0 L9,10">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.1" Brush="#CCCCFF" />
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                            <!-- 竖线100整数倍 -->
                            <GeometryDrawing Geometry="M0,0 L0,10">
                                <GeometryDrawing.Pen>
                                    <Pen Thickness="0.1" Brush="DarkOrange" />
                                </GeometryDrawing.Pen>
                            </GeometryDrawing>
                        </DrawingGroup.Children>
                    </DrawingGroup>
                </DrawingBrush.Drawing>
            </DrawingBrush>

<!-- 这里是外框线 -->
            <Style x:Key="MyGridBorderStyle">
                <Setter Property="Border.Background" Value="{StaticResource MyGridBrushResource}"/>
                <Setter Property="Border.HorizontalAlignment" Value="Center"/>
                <Setter Property="Border.VerticalAlignment" Value="Top"/>
                <Setter Property="Border.BorderBrush" Value="Black"/>
                <Setter Property="Border.BorderThickness" Value="1"/>
            </Style>
        </Canvas.Resources>

<!-- 引用方式 -->
        <Border Style="{StaticResource MyGridBorderStyle}">
            <Canvas Width="700" Height="600">
<!-- // 演示平移 -->
            <Canvas Width="800" Height="100" Canvas.Top="0" Canvas.Left="0">
<!-- 不平移-->
<Canvas Width="120" Height="120"  Canvas.Left="0" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
<!--水平平移10 -->
<Canvas Width="120" Height="120"  Canvas.Left="100" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Black" />
                <Rectangle Width="80" Height="80" Stroke="Red">
                    <Rectangle.RenderTransform>
                           <TranslateTransform X="10" />
                    </Rectangle.RenderTransform>
                </Rectangle>
</Canvas>

<!--垂直平移10 -->
<Canvas Width="120" Height="120"  Canvas.Left="200" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Black" />
                <Rectangle Width="80" Height="80" Stroke="Red">
                    <Rectangle.RenderTransform>
                           <TranslateTransform Y="10" />
                    </Rectangle.RenderTransform>
                </Rectangle>
</Canvas>

<!--水平平移10,垂直平移10 -->
<Canvas Width="120" Height="120"  Canvas.Left="300" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Black" />
                <Rectangle Width="80" Height="80" Stroke="Red">
                    <Rectangle.RenderTransform>
                           <TranslateTransform X="10" Y="10" />
                    </Rectangle.RenderTransform>
                </Rectangle></Canvas>
       </Canvas>

<!-- // 演示缩放 -->
            <Canvas Width="800" Height="100" Canvas.Top="100" Canvas.Left="0">
<!-- 未缩放时的原始大小-->
<Canvas Width="120" Height="120"  Canvas.Left="0" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
<!--水平缩放比例:2倍 -->
<Canvas Width="120" Height="120"  Canvas.Left="100" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Red">
                    <Rectangle.RenderTransform>
                           <ScaleTransform ScaleX="2" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>

<!--垂直缩放比例2.5倍 -->
<Canvas Width="120" Height="120"  Canvas.Left="300" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Red">
                    <Rectangle.RenderTransform>
                           <ScaleTransform ScaleY="2.5" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>

<!--水平、垂直同时缩放2.5倍 -->
<Canvas Width="120" Height="120"  Canvas.Left="400" Canvas.Top="0">
                <Rectangle Width="80" Height="80" Stroke="Red">
                    <Rectangle.RenderTransform>
                           <ScaleTransform ScaleX="2.5" ScaleY="2.5" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <Rectangle Width="80" Height="80" Stroke="Black" />
</Canvas>
       </Canvas>

<!-- // 演示旋转 -->
            <Canvas Width="800" Height="100" Canvas.Top="300" Canvas.Left="0">
<!-- 不旋转-->
<Canvas Width="120" Height="120"  Canvas.Left="0" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black" />
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--旋转15度(默认以左上角为旋转中心 -->
<Canvas Width="120" Height="120"  Canvas.Left="100" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <RotateTransform Angle="15" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--旋转15度,以右上角为旋转中心 -->
<Canvas Width="120" Height="120"  Canvas.Left="200" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <RotateTransform Angle="15" CenterX="80" CenterY="0" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="78"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--旋转15度,以左下角为旋转中心 -->
<Canvas Width="120" Height="120"  Canvas.Left="300" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <RotateTransform Angle="15" CenterX="0" CenterY="80" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="78" Canvas.Left="-2"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--旋转15度,以右下角为旋转中心 -->
<Canvas Width="120" Height="120"  Canvas.Left="400" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <RotateTransform Angle="15" CenterX="80" CenterY="80" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="78" Canvas.Left="78"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--旋转15度,以正方形的中心点为旋转中心 -->
<Canvas Width="120" Height="120"  Canvas.Left="500" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <RotateTransform Angle="15" CenterX="40" CenterY="40" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="38" Canvas.Left="38"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
       </Canvas>

<!-- // 演示倾斜 -->
            <Canvas Width="800" Height="100" Canvas.Top="400" Canvas.Left="0">
<!-- 原始图形-->
<Canvas Width="120" Height="120"  Canvas.Left="0" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black" />
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--沿X轴方向倾斜10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120"  Canvas.Left="100" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <SkewTransform AngleX="10" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 倾斜中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--沿Y轴方向倾斜10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120"  Canvas.Left="200" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <SkewTransform AngleY="10" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--X轴、Y轴同时倾斜10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120"  Canvas.Left="300" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <SkewTransform AngleX="10" AngleY="10" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--设定倾斜中心为矩形的正中心位置,沿X轴倾斜10度 -->
<Canvas Width="120" Height="120"  Canvas.Left="400" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <SkewTransform AngleX="10" CenterX="40" CenterY="40" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="38" Canvas.Left="38"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--仍将正方形的中心点作为倾斜中心点,X轴倾斜负10度 -->
<Canvas Width="120" Height="120"  Canvas.Left="500" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <SkewTransform AngleX="-10" CenterX="40" CenterY="40" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="38" Canvas.Left="38"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
<!--X轴、Y轴同时倾斜负10度(默认以左上角为原点) -->
<Canvas Width="120" Height="120"  Canvas.Left="600" Canvas.Top="20">
                <Rectangle Width="80" Height="80" Stroke="Black">
                    <Rectangle.RenderTransform>
                           <SkewTransform AngleX="-10" AngleY="-10" />
                    </Rectangle.RenderTransform>
                </Rectangle>
                <!-- 旋转中心点 -->
                <Ellipse Width="4" Height="4" Fill="Red" Canvas.Top="-2" Canvas.Left="-2"  />
                <!-- 矩形中心点 -->
                <Ellipse Width="4" Height="4" Stroke="Black" Canvas.Top="38" Canvas.Left="38"  />
</Canvas>
       </Canvas>

</Canvas>
        </Border>

</Canvas>

WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示的更多相关文章

  1. 图片在 canvas 中的 选中/平移/缩放/旋转,包含了所有canvas的2D变化,让你认识到数学的重要性

    1.介绍 canvas 已经出来好久了,相信大家多少都有接触. 如果你是前端页面开发/移动开发,那么你肯定会有做过图片上传处理,图片优化,以及图片合成,这些都是可以用 canvas 实现的. 如果你是 ...

  2. WPF/Silverlight中的RichTextBox总结

    WPF/Silverlight中的RichTextBox总结   在WPF或者是在Silverlight中有个非常强大的可以编辑的容器控件RichTextBox,有的时间会采取该控件来作为编辑控件.鉴 ...

  3. WPF,SilverLight中直线的样式示例

    原文:WPF,SilverLight中直线的样式示例 XAML代码:// LineStyle.xaml<Viewbox Width="600" Height="50 ...

  4. 【转载】Unity中矩阵的平移、旋转、缩放

    By:克森 简介 在这篇文章中,我们将会学到几个概念:平移矩阵.旋转矩阵.缩放矩阵.在学这几个基本概念的同时,我们会用到 Mesh(网格).数学运算.4x4矩阵的一些简单的操作.但由于克森也是新手,文 ...

  5. Graphics平移缩放旋转(转载)+点睛

    点睛:可以进行多次旋转和平移,也就是平移以后再平移,旋转以后再旋转,有时候一次达不到要求,如果你想一次调整完美的话很麻烦,所以最好多次,上代码 private void btnTranslate_Cl ...

  6. WPF XAML中 Storyboard.TargetProperty设置TransformGroup指定的变换"RenderTransform.Children

    <Grid x:Name="xx" RenderTransformOrigin="0.5,0.5"> <Grid.RenderTransfor ...

  7. Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ...

  8. Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...

  9. WPF/Silverlight深度解决方案:(一)解锁被Storyboard束缚的关联属性

    原文 WPF/Silverlight深度解决方案:(一)解锁被Storyboard束缚的关联属性 如果您在使用WPF/Silverlight进行相关动画开发中使用了Storyboard,并对关联属性进 ...

随机推荐

  1. win7+vs2008+opencv

    1.下载安装VS2008,然后直接下载opencv的windows的安装版, 2.把opencv解压出来,我的路径为:D:\Program\opencv 3.配置PATH:电脑--属性--高级系统设置 ...

  2. [Android学习笔记]ShareSDK的使用

    ShareSDK使用方便,集成简单,正式客户端开发人员的首选组件 集成步骤,使用说明见官方文档: http://wiki.sharesdk.cn/Android_快速集成指南 记录: 直接使用官方De ...

  3. haproxy 中的http请求和https请求

    use Mojolicious::Lite; use JSON qw/encode_json decode_json/; use Encode; no strict; use JSON; # /foo ...

  4. hdu 3832 Earth Hour (最短路变形)

    Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Tota ...

  5. Linux Shell 之 我的第一个Shell程序

      这里我首先会介绍一个Shell是什么,再介绍我的第一个Shell程序和从中总结的经验. 一.Shell是什么 在说我的这个Shell程序之前,还是先跟大家说说什么是Shell吧,相信Shell这个 ...

  6. JAVA进阶----ThreadPoolExecutor机制(转)

    ThreadPoolExecutor机制 一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程 ...

  7. VSTO学习笔记(四)从SharePoint 2010中下载文件

    原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...

  8. Matlab---串口操作---数据採集篇

    matlab功能强大,串口操作也非常easy.相信看过下面两个实验你就能掌握咯! 開始吧! 实验1: 从电脑COM2口读取数据.并将数据保存在TXT文件里,方便数据分析,以下是M脚本: %名 称:Ma ...

  9. hdu2861(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2861 题意:n个板凳有m个人坐,求刚好将序列分成k段的方式. 分析: a[n][m][k]=a[n-1 ...

  10. hosts文件导致无法访问网站

    前段时间有人反映无论怎么样都无法在自己的电脑上访问法兰克官网,那台电脑的DNS也无法解析,通过查看hosts文件后发现,原来该电脑的hosts文件木马修改过了,屏蔽了相关的域名,删除新增的或者用其他机 ...