zoukankan      html  css  js  c++  java
  • 重新想象 Windows 8 Store Apps (14) 控件 UI: RenderTransform, Projection, Clip, UseLayoutRounding

    [源码下载]


    重新想象 Windows 8 Store Apps (14) - 控件 UI: RenderTransform, Projection, Clip, UseLayoutRounding



    作者:webabcd


    介绍
    重新想象 Windows 8 Store Apps 之 控件 UI

    • RenderTransform - 变换(用于做位移,旋转,缩放,扭曲等变换)
    • Projection - 映射
    • Clip - 剪裁并显示 UIElement 的指定区域
    • UseLayoutRounding - 是否使用完整像素布局



    示例
    1、演示 RenderTransform 的应用
    Controls/UI/RenderTransform.xaml

    <Page
        x:Class="XamlDemo.Controls.UI.RenderTransform"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XamlDemo.Controls.UI"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <Grid Margin="120 0 0 0">
    
                <!--
                    RenderTransform - 变换(用于做位移,旋转,缩放,扭曲等变换)
                -->
                
                <Grid HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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="400 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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="800 0 0 0" HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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="0 200 0 0" HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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="400 200 0 0"  HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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="800 200 0 0"  HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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>
    
                <!--
                    CompositeTransform - 将多种变换方式合而为一
                        CenterX - 变换中心点的 X 坐标
                        CenterY - 变换中心点的 Y 坐标
                        Rotation - 顺时针旋转角度
                        ScaleX - 沿 X 轴方向上的缩放比例
                        ScaleY - 沿 Y 轴方向上的缩放比例
                        SkewX - X 轴扭曲角度
                        SkewY - Y 轴扭曲角度
                        TranslateX - 沿 X 轴方向上的平移距离
                        TranslateY - 沿 Y 轴方向上的平移距离
                -->
                <Grid Margin="0 400 0 0" HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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>
                            <CompositeTransform SkewX="30" Rotation="60" ScaleX="0.6" ScaleY="0.3" />
                        </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
                
                    利用 MatrixTransform 实现平移、旋转、缩放、扭曲的 Demo 详见 http://www.cnblogs.com/webabcd/archive/2008/11/03/1325150.html
                -->
                <Grid Margin="400 400 0 0" HorizontalAlignment="Left" VerticalAlignment="Top">
                    <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>
                            <!--
                                m11, m12, m21, m22, offsetX, offsetY
                            -->
                            <MatrixTransform Matrix="1, 0.5, 0, 1, 30, 10" />
                        </Rectangle.RenderTransform>
                    </Rectangle>
                </Grid>
                
            </Grid>
        </Grid>
    </Page>


    2、演示 Projection 的应用
    Controls/UI/Projection.xaml

    <Page
        x:Class="XamlDemo.Controls.UI.Projection"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XamlDemo.Controls.UI"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <Grid Margin="120 0 0 0">
    
                <!--
                    Projection - 映射
                
                    PlaneProjection - 平面映射,使 UIElement 实现 3D 效果
                        RotationX, RotationY, RotationZ - 绕 X轴, Y轴, Z轴 旋转的角度
                        CenterOfRotationX, CenterOfRotationY, CenterOfRotationZ - X轴, Y轴, Z轴 旋转中心点的相对位置(CenterOfRotationX, CenterOfRotationY 默认值为 0.5 , CenterOfRotationZ 默认值为 0)
                        GlobalOffsetX, GlobalOffsetY, GlobalOffsetZ - 沿 X轴, Y轴, Z轴 的偏移量,此 3 个方向与屏幕的 3 个方向相同
                        LocalOffsetX, LocalOffsetY, LocalOffsetZ - 沿 X轴, Y轴, Z轴 的偏移量,此 3 个方向与相关的 UIElement 当前的 3 个方向相同
                
                    Matrix3DProjection - 矩阵映射
                -->
                
                <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
                    <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.Projection>
                            <PlaneProjection x:Name="planeProjection" />
                        </Rectangle.Projection>
                    </Rectangle>
                </Grid>
    
                <StackPanel>
                    <TextBlock FontSize="14.667" Text="RotationX:" Margin="0 10 0 0" />
                    <Slider Width="150" Minimum="0" Maximum="360" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=RotationX, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="RotationY:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="0" Maximum="360" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=RotationY, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="RotationZ:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="0" Maximum="360" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=RotationZ, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="LocalOffsetX:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="-150" Maximum="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=LocalOffsetX, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="LocalOffsetY:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="-150" Maximum="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=LocalOffsetY, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="LocalOffsetZ:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="-150" Maximum="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=LocalOffsetZ, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="GlobalOffsetX:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="-150" Maximum="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=GlobalOffsetX, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="GlobalOffsetY:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="-150" Maximum="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=GlobalOffsetY, Mode=TwoWay}" />
    
                    <TextBlock FontSize="14.667" Text="GlobalOffsetZ:" Margin="0 -10 0 0" />
                    <Slider Width="150" Minimum="-150" Maximum="150" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0 -10 0 0"
                        Value="{Binding ElementName=planeProjection, Path=GlobalOffsetZ, Mode=TwoWay}" />
                </StackPanel>
                
            </Grid>
        </Grid>
    </Page>


    3、演示 Clip 的应用
    Controls/UI/Clip.xaml

    <Page
        x:Class="XamlDemo.Controls.UI.Clip"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XamlDemo.Controls.UI"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="120 0 0 0">
    
                <Grid HorizontalAlignment="Left" VerticalAlignment="Top">
                    <Rectangle Width="200" Height="100" Fill="Red" />
                    <Rectangle Width="200" Height="100" Fill="Green">
    
                        <!--
                            Clip - 剪裁并显示 UIElement 的指定区域
                            
                            注:win8 中只能通过 RectangleGeometry 剪裁 UIElement
                        -->
                        <Rectangle.Clip>
                            <RectangleGeometry Rect="10 10 50 50" />
                        </Rectangle.Clip>
                    </Rectangle>
                </Grid>
    
            </StackPanel>
        </Grid>
    </Page>


    4、演示 UseLayoutRounding 的应用
    Controls/UI/UseLayoutRounding.xaml

    <Page
        x:Class="XamlDemo.Controls.UI.UseLayoutRounding"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XamlDemo.Controls.UI"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d">
    
        <Grid Background="Transparent">
            <StackPanel Margin="120 0 0 0">
    
                <!--
                    UseLayoutRounding - 是否使用完整像素布局。默认值为 true
                        举例:
                        1、如果设置了Margin="1.6"(非完整像素)
                        2、那么UseLayoutRounding="true"时,则容器的外边距不相等;UseLayoutRounding="false"时,则容器的外边距相等
                -->
                <Grid Width="200" Height="200" HorizontalAlignment="Left" UseLayoutRounding="True">
                    <Border BorderBrush="#FF884909" Background="#FFFBECA3" BorderThickness="1"></Border>
                    <Border BorderBrush="#FF884909" Background="#FFFBECA3" BorderThickness="1" Margin="1.6"></Border>
                </Grid>
    
                <Grid Width="200" Height="200" Margin="0 10 0 0" HorizontalAlignment="Left" UseLayoutRounding="False">
                    <Border BorderBrush="#FF884909" Background="#FFFBECA3" BorderThickness="1"></Border>
                    <Border BorderBrush="#FF884909" Background="#FFFBECA3" BorderThickness="1" Margin="1.6"></Border>
                </Grid>
                
            </StackPanel>
        </Grid>
    </Page>



    OK
    [源码下载]

  • 相关阅读:
    nginx-1.8.1的安装
    ElasticSearch 在3节点集群的启动
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    sqoop导入导出对mysql再带数据库test能跑通用户自己建立的数据库则不行
    LeetCode 501. Find Mode in Binary Search Tree (找到二叉搜索树的众数)
    LeetCode 437. Path Sum III (路径之和之三)
    LeetCode 404. Sum of Left Leaves (左子叶之和)
    LeetCode 257. Binary Tree Paths (二叉树路径)
    LeetCode Questions List (LeetCode 问题列表)- Java Solutions
    LeetCode 561. Array Partition I (数组分隔之一)
  • 原文地址:https://www.cnblogs.com/webabcd/p/2980096.html
Copyright © 2011-2022 走看看