背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2D变换), Clip(剪裁)

简介: 原文:背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2D变换), Clip(剪裁)[源码下载] 背水一战 Windows 10 (71) - 控件(控件基类): UIElement - RenderTransform(2...
原文: 背水一战 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
[源码下载]

目录
相关文章
|
4月前
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
228 0
|
7月前
|
JavaScript Linux C#
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
152 0
|
C++ Windows
C++ Windows窗口程序:子窗口控件之按钮类button
C++ Windows窗口程序:子窗口控件之按钮类button
946 0
|
API C# Windows
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
C#对Windows窗口或窗口句柄的操作,都是通过 P/Invoke Win32 API 实现的,DllImport引入Windows API操作窗口(句柄),可以实现枚举已打开的窗口、向窗口...
4038 0
C#实现操作Windows窗口句柄:遍历、查找窗体和控件【窗口句柄最全总结之一】
|
IDE 程序员 编译器
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法
|
Windows
Windows程序设计——Windows单选按钮、复选框、分组框控件
Windows程序设计——Windows单选按钮、复选框、分组框控件
649 0
Windows程序设计——Windows单选按钮、复选框、分组框控件
|
Windows
Windows程序设计——(源代码)Windows单选按钮、复选框、分组框控件
Windows程序设计——(源代码)Windows单选按钮、复选框、分组框控件
216 0
|
C# Windows 开发者
Windows 8.1 新增控件之 MenuFlyout
原文:Windows 8.1 新增控件之 MenuFlyout 开始这篇讲解前,我们先来温习一下Flyout 的内容,当触发应用中某个Button 时会有Flyout 出现提示用户该操作接下来将会发生什么。
822 0
|
1月前
|
网络安全 Windows
Windows server 2012R2系统安装远程桌面服务后无法多用户同时登录是什么原因?
【11月更文挑战第15天】本文介绍了在Windows Server 2012 R2中遇到的多用户无法同时登录远程桌面的问题及其解决方法,包括许可模式限制、组策略配置问题、远程桌面服务配置错误以及网络和防火墙问题四个方面的原因分析及对应的解决方案。