Transform详解,以及UIElement和FrameworkElement的常用属性(转)

Silverlight2.0转换与UI元素操作示例
本文详细介绍了Silverlight2.0中关于Transform(转换)、UIElement(用户界面元素)以及FrameworkElement(框架元素)的用法,包括如何应用各种转换效果、剪辑区域、不透明度、蒙版、布局圆整、光标样式、标记信息等,通过实例展示了这些特性的具体应用。
作者: webabcd


介绍
Silverlight 2.0 其它:
    RenderTransform - 呈现位置的转换(System.Windows.Media.Transform类型)
        TranslateTransform - 平移转换
        RotateTransform - 旋转转换(顺时针)
        ScaleTransform - 缩放转换
        SkewTransform - 扭曲转换
        MatrixTransform - 仿射矩阵变换
        TransformGroup - 多个 Transform 组成的复合转换
    RenderTransformOrigin - 位置转换的中心点
    Clip - 容器的剪辑区域(System.Windows.Media.Geometry类型)
    IsHitTestVisible - 命中测试是否可见
    Opacity - 不透明度。0 - 1之间
    OpacityMask - 不透明蒙版(遮罩)(System.Windows.Media.Brush类型)
    UseLayoutRounding - 是否使用完整像素布局
    Cursor - 鼠标移动到 FrameworkElement 上面时,鼠标指针的样式
    Margin - 容器边缘与边缘之外的空白距离(像素值:上下左右;左右,上下;左,上,右,下)
    Tag - 保存一些额外的信息(System.Object类型)

示例
1、Transform.xaml
< UserControl  x:Class ="Silverlight20.Other.Transform"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
     < StackPanel  HorizontalAlignment ="Left" >

         <!--
        RenderTransform - 呈现位置的转换(System.Windows.Media.Transform类型)
        RenderTransformOrigin - 位置转换的中心点
        
-->

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >

                     <!-- TranslateTransform - 平移转换 -->
                     <!--
                    X - 水平方向上移动的距离。默认值 0
                    Y - 垂直方向上移动的距离。默认值 0
                    
-->
                     < TranslateTransform  X ="100"  Y ="10"   />

                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >

                     <!-- RotateTransform - 旋转转换(顺时针) -->
                     <!--
                    Angle - 旋转角度。默认值 0
                    CenterX - 旋转中心点的 X 轴坐标。默认值 0
                    CenterY - 旋转中心点的 Y 轴坐标。默认值 0
                    
-->
                     < RotateTransform  Angle ="15"  CenterX ="100"  CenterY ="50"   />

                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             <!--
            RenderTransformOrigin - 位置转换的中心点
            
-->
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3"  RenderTransformOrigin ="0.5,0.5" >
                 < Rectangle.RenderTransform >
                     < RotateTransform  Angle ="15"   />
                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >

                     <!-- ScaleTransform - 缩放转换 -->
                     <!--
                    ScaleX - X 轴方向上缩放的倍数。默认值 1
                    ScaleY - Y 轴方向上缩放的倍数。默认值 1
                    CenterX - 缩放中心点的 X 轴坐标。默认值 0
                    CenterY - 缩放中心点的 Y 轴坐标。默认值 0
                    
-->
                     < ScaleTransform  ScaleX ="1.1"  ScaleY ="1.3"  CenterX ="100"  CenterY ="50"   />

                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >

                     <!-- SkewTransform - 扭曲转换(典型应用:在 二维 对象中模拟 三维 深度) -->
                     <!--
                    CenterX - 扭曲中心点的 X 轴坐标。默认值 0
                    CenterY - 扭曲中心点的 Y 轴坐标。默认值 0
                    AngleX - X 轴扭曲角度,Y 轴绕原点旋转(逆时针)。CenterX 对此值所产生的呈现结果没有影响。默认值 0
                    AngleY - Y 轴扭曲角度,X 轴绕原点旋转(顺时针)。CenterY 对此值所产生的呈现结果没有影响。默认值 0
                    
-->
                     < SkewTransform  AngleX ="30"  AngleY ="5"  CenterX ="0"  CenterY ="0"   />

                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >

                     <!-- TransformGroup - 多个 Transform 组成的复合转换 -->
                     < TransformGroup >
                         < TranslateTransform  X ="100"  Y ="10"   />
                         < RotateTransform  Angle ="15"  CenterX ="100"  CenterY ="50"   />
                     </ TransformGroup >

                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >


         <!-- MatrixTransform - 仿射矩阵变换 -->
         <!--
        |X|             |M11(默认值 1)      M21(默认值 0)       0|
        |Y| = |x y 1| * |M12(默认值 0)      M22(默认值 1)       0|
        |1|             |OffsetX(默认值 0)  OffsetY(默认值 0)   1|

        X = x * M11 + y * M12 + OffsetX
        Y = x * M21 + y * M22 + OffsetY
        
-->
         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >
                     < MatrixTransform >
                         < MatrixTransform.Matrix  >

                             <!-- 仿射矩阵中的 平移转换 -->
                             <!--
                            OffsetX - 水平位移
                            OffsetY - 垂直位移
                            
-->
                             < Matrix  OffsetX ="100"  OffsetY ="10"   />

                         </ MatrixTransform.Matrix >
                     </ MatrixTransform >
                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3"  RenderTransformOrigin ="0.5,0.5" >
                 < Rectangle.RenderTransform >
                     < MatrixTransform >
                         < MatrixTransform.Matrix  >

                             <!-- 仿射矩阵中的 缩放转换 -->
                             <!--
                            M11 - 水平放大倍数
                            M22 - 垂直放大倍数
                            
-->
                             < Matrix  M11 ="1.1"  M22 ="1.3"   />

                         </ MatrixTransform.Matrix >
                     </ MatrixTransform >
                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3" >
                 < Rectangle.RenderTransform >
                     < MatrixTransform >
                         < MatrixTransform.Matrix  >

                             <!-- 仿射矩阵中的 扭曲转换 -->
                             <!--
                            M21 - X 轴扭曲角度,Y 轴绕原点旋转(逆时针)。tanθ(本例中θ等于30度)
                            M12 - Y 轴扭曲角度,X 轴绕原点旋转(顺时针)。tanθ(本例中θ等于5度)
                            
-->
                             < Matrix  M21 ="0.577350269189626"  M12 ="0.087488663525924"   />

                         </ MatrixTransform.Matrix >
                     </ MatrixTransform >
                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  StrokeDashArray ="3,1"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3"  Opacity ="0.3"  RenderTransformOrigin ="0.5,0.5" >
                 < Rectangle.RenderTransform >
                     < MatrixTransform >
                         < MatrixTransform.Matrix  >

                             <!-- 仿射矩阵中的 旋转转换 -->
                             <!--
                            |cosθ      sinθ       0|
                            |-sinθ     cosθ       0|
                            |0          0           1|
                            注:本例中的θ角等于15度
                            
-->
                             < Matrix  M11 ="0.965925826289068"  M12 ="0.258819045102521"  M21 ="-0.258819045102521"  M22 ="0.965925826289068"   />

                         </ MatrixTransform.Matrix >
                     </ MatrixTransform >
                 </ Rectangle.RenderTransform >
             </ Rectangle >
         </ Grid >
     </ StackPanel >
</ UserControl >
2、UIElement.xaml
< UserControl  x:Class ="Silverlight20.Other.UIElement"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
     < StackPanel  HorizontalAlignment ="Left" >

         < Grid  Margin ="20" >
             < Rectangle  Width ="200"  Height ="100"  Fill ="Green"  Stroke ="Blue"  StrokeThickness ="3"   />
             < Rectangle  Width ="200"  Height ="100"  Fill ="Yellow"  Stroke ="Red"  StrokeThickness ="3" >

                 <!--
                Clip - 容器的剪辑区域(System.Windows.Media.Geometry类型)
                
-->
                 < Rectangle.Clip >
                     < EllipseGeometry  Center ="200,100"  RadiusX ="100"  RadiusY ="50"   />
                 </ Rectangle.Clip >
             </ Rectangle >
         </ Grid >

         < Grid  Margin ="20" >

             <!--
            IsHitTestVisible - 命中测试是否可见。如果设置为False,则无法响应Click事件
            
-->
             < Button  x:Name ="btnTest"  Width ="200"  Content ="关闭了HitTest的按钮"  Click ="btnTest_Click"  IsHitTestVisible ="False"   />
         </ Grid >


         < Grid  Margin ="20" >
        
             <!--
            Opacity - 不透明度。0 - 1之间
            
-->
             < Image  Source ="/Silverlight20;component/Images/Logo.jpg"  Height ="100"  Opacity ="0.3"   />
         </ Grid >

         < Grid  Margin ="20" >
             < Image  Source ="/Silverlight20;component/Images/Logo.jpg"  Height ="100" >

                 <!--
                OpacityMask - 不透明蒙版(遮罩)(System.Windows.Media.Brush类型)
                
-->
                 < Image.OpacityMask >
                     < RadialGradientBrush  Center ="0.5,0.5" >
                         < GradientStop  Color ="#FF000000"  Offset ="0"   />
                         < GradientStop  Color ="#44000000"  Offset ="0.8"   />
                         < GradientStop  Color ="#00000000"  Offset ="1"   />
                     </ RadialGradientBrush >
                 </ Image.OpacityMask >
             </ Image >
         </ Grid >

         < Grid  Margin ="20" >
             < StackPanel >
            
                 <!--
                UseLayoutRounding - 是否使用完整像素布局。默认值为 true
                    举例:如果设置了Margin="1.6"(非完整像素)
                    那么UseLayoutRounding="true"时,则容器的外边距不相等;UseLayoutRounding="false"时,则容器的外边距相等
                
-->
                 < Grid  Width ="20"  Height ="20"  Margin ="5"  UseLayoutRounding ="True" >
                     < Border  BorderBrush ="#FF884909"  Background ="#FFFBECA3"  BorderThickness ="1" ></ Border >
                     < Border  BorderBrush ="#FF884909"  Background ="#FFFBECA3"  BorderThickness ="1"  Margin ="1.6" ></ Border >
                 </ Grid >

                 < Grid  Width ="20"  Height ="20"  Margin ="5"  UseLayoutRounding ="False" >
                     < Border  BorderBrush ="#FF884909"  Background ="#FFFBECA3"  BorderThickness ="1" ></ Border >
                     < Border  BorderBrush ="#FF884909"  Background ="#FFFBECA3"  BorderThickness ="1"  Margin ="1.6" ></ Border >
                 </ Grid >
             </ StackPanel >
         </ Grid >
        
     </ StackPanel >
</ UserControl >
3、FrameworkElement.xaml
< UserControl  x:Class ="Silverlight20.Other.FrameworkElement"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml" >
     < StackPanel  HorizontalAlignment ="Left"   >

         <!--
        Cursor - 鼠标移动到 FrameworkElement 上面时,鼠标指针的样式
            Arrow - 箭头
            Hand - 手形 
            Wait - 沙漏
            IBeam - “I”字形 
            Stylus - 点
            Eraser - 橡皮
            None - 无 
        Margin - 容器边缘与边缘之外的空白距离(像素值:上下左右;左右,上下;左,上,右,下)
        Tag - 保存一些额外的信息(System.Object类型)
        
-->
         < Rectangle  Width ="200"  Height ="100"  Fill ="Red"  Cursor ="IBeam"  Margin ="5"  Tag ="1234"   />

     </ StackPanel >
</ UserControl >



转载于:https://www.cnblogs.com/arongbest/archive/2011/10/09/2203646.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值