背水一戰 Windows 10 (71) - 控件(控件基類): UIElement - RenderTransform(2D變換), Clip(剪裁)


[源碼下載]


背水一戰 Windows 10 (71) - 控件(控件基類): UIElement - RenderTransform(2D變換), Clip(剪裁)



作者:webabcd


介紹
背水一戰 Windows 10 之 控件(控件基類 - UIElement)

  • RenderTransform(2D變換)
  • Clip(剪裁)



示例
1、演示 UIElement 的 2D 變換的應用
Controls/BaseControl/UIElementDemo/RenderTransformDemo.xaml

<Page
    x:Class="Windows10.Controls.BaseControl.UIElementDemo.RenderTransformDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.BaseControl.UIElementDemo"
    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="10 0 10 10">

            <!--
                RenderTransform - 2D 變換(位移,旋轉,縮放,扭曲等)
            -->

            <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 - 位置變換的中心點(這是一個相對值,元素左上角為 0,0,元素右下角為 1,1,支持小於 0 或大於 1 的值)
                        這個值是 Point 類型,在 xaml 中可以用逗號或空格分隔
                -->
                <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>

Controls/BaseControl/UIElementDemo/RenderTransformDemo.xaml.cs

/*
 * UIElement - UIElement(繼承自 DependencyObject, 請參見 /Controls/BaseControl/DependencyObjectDemo/)
 *     RenderTransform - 2D 變換(位移,旋轉,縮放,扭曲等)
 *     RenderTransformOrigin - 2D 變換的原點(這是一個相對值,元素左上角為 0,0,元素右下角為 1,1,支持小於 0 或大於 1 的值)
 *     
 *     
 * 本例用於演示 UIElement 的 2D 變換的應用
 */

using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.BaseControl.UIElementDemo
{
    public sealed partial class RenderTransformDemo : Page
    {
        public RenderTransformDemo()
        {
            this.InitializeComponent();
        }
    }
}


2、演示 UIElement 的 Clip 的應用
Controls/BaseControl/UIElementDemo/ClipDemo.xaml

<Page
    x:Class="Windows10.Controls.BaseControl.UIElementDemo.ClipDemo"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Windows10.Controls.BaseControl.UIElementDemo"
    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="10 0 10 10">

            <Grid HorizontalAlignment="Left" VerticalAlignment="Top">
                <Rectangle Width="200" Height="100" Fill="Red" />
                <Rectangle Width="200" Height="100" Fill="Green">

                    <!--
                        Clip - 剪裁 UIElement 的指定區域(即讓 UIElement 的指定區域變為透明)
                        
                        注:目前只能通過 RectangleGeometry 剪裁 UIElement
                    -->
                    <Rectangle.Clip>
                        <RectangleGeometry Rect="10 10 50 50" />
                    </Rectangle.Clip>
                </Rectangle>
            </Grid>

        </StackPanel>
    </Grid>
</Page>

Controls/BaseControl/UIElementDemo/ClipDemo.xaml.cs

/*
 * UIElement - UIElement(繼承自 DependencyObject, 請參見 /Controls/BaseControl/DependencyObjectDemo/)
 *     Clip - 剪裁 UIElement 的指定區域(目前只支持通過 RectangleGeometry 剪裁 UIElement)
 *     
 *     
 * 本例用於演示 UIElement 的 Clip 的應用
 */

using Windows.UI.Xaml.Controls;

namespace Windows10.Controls.BaseControl.UIElementDemo
{
    public sealed partial class ClipDemo : Page
    {
        public ClipDemo()
        {
            this.InitializeComponent();
        }
    }
}



OK
[源碼下載]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM