首页 > 其他分享 >2019-3-13-win10-uwp-使用-ScaleTransform-放大某个元素

2019-3-13-win10-uwp-使用-ScaleTransform-放大某个元素

时间:2024-10-17 14:19:23浏览次数:3  
标签:13 UWP sender Button uwp ScaleTransform button 放大

title

author

date

CreateTime

categories

win10 uwp 使用 ScaleTransform 放大某个元素

lindexi

2019-3-13 19:5:56 +0800

2019-03-13 16:50:36 +0800

Win10 UWP

本文告诉大家如何通过 ScaleTransform 放大元素 放大一个元素的方法有很多个,通过 ScaleTransform 放大是比较清真的

在 UWP 中 ScaleTransform 是属于 RenderTransform 的内容,所有的 UIElement 都有 RenderTransform 属性,通过设置这个属性可以做到在运行的时候修改渲染的元素

如新建一个简单的 UWP 程序,里面就放一个按钮

<Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="Click" Click="Button_OnClick">
        </Button>

如果想要将按钮显示放大两倍,简单的方法是使用 ScaleTransform 设置两个方向放大

修改一下代码

<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
                <Button Margin="10,10,10,10" Content="放大前按钮">

                </Button>
                <Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="放大的按钮">
                    <Button.RenderTransform>
                        <ScaleTransform x:Name="ScaleTransform" ScaleX="2" ScaleY="2"></ScaleTransform>
                    </Button.RenderTransform>
                </Button>
            </StackPanel>

代码请看 github

从上面看到 ScaleTransform 支持两个方向的放大,可以设置两个方向为不同的值

其实 ScaleTransform 还可以设置放大中心,也就是从那个点为中心放大

默认没有设置是从 (0,0) 点也就是左上角的点开始放大,放大之后会保持左上角的坐标不变

很多时候会使用到的是从中心放大,从中心放大需要设置放大元素的中心点,请看代码,在按钮点击的时候放大,中心点是按钮中心

<Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="放大的按钮" Click="Button_OnClick">
    <Button.RenderTransform>
        <ScaleTransform x:Name="ScaleTransform" ScaleX="1" ScaleY="1"></ScaleTransform>
    </Button.RenderTransform>
</Button>
private void Button_OnClick(object sender, RoutedEventArgs e)
        {
            var button = (Button) sender;
            ScaleTransform.CenterX = button.ActualWidth / 2;
            ScaleTransform.CenterY = button.ActualHeight / 2;

            ScaleTransform.ScaleX = 1.5;
            ScaleTransform.ScaleY = 1.5;
        }

对比一下不设置的从左上角放大

private void Button_OnClick(object sender, RoutedEventArgs e)
        {
            ScaleTransform.ScaleX = 1.5;
            ScaleTransform.ScaleY = 1.5;
        }

那么如何做缩放动画

下面我使用一个没有一点优点的方法做动画,请小伙伴不要学习这个写法

private void Button_OnClick(object sender, RoutedEventArgs e)
        {
            Task.Run(async () =>
            {
                while (true)
                {
                    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                    {
                        ScaleTransform.ScaleX++;
                        ScaleTransform.ScaleY++;
                    });

                    await Task.Delay(100);
                }
            });
        }

我开启一个线程,使用一个无限循环,在里面使用 Task.Delay 做延迟

因为在 UWP 不是主线程是不能访问主线程的元素,所以就需要通过 Dispatcher.RunAsync 让代码在主线程运行

那么清真一点的方法是如何做呢?通过 xaml 写动画倒是一个不错的方法

<Button VerticalAlignment="Center" HorizontalAlignment="Center" Content="放大的按钮" Click="Button_OnClick">
                    <Button.Resources>
                        <Storyboard x:Key="Storyboard">
                            <DoubleAnimation Storyboard.TargetName="ScaleTransform" Storyboard.TargetProperty="ScaleX" To="1.5" Duration="0:0:1"></DoubleAnimation>
                            <DoubleAnimation Storyboard.TargetName="ScaleTransform" Storyboard.TargetProperty="ScaleY" To="1.5" Duration="0:0:1"></DoubleAnimation>
                        </Storyboard>
                    </Button.Resources>
                    <Button.RenderTransform>
                        <ScaleTransform x:Name="ScaleTransform" ScaleX="1" ScaleY="1"></ScaleTransform>
                    </Button.RenderTransform>
                </Button>

这时通过点击按钮拿到资源,运行动画

private void Button_OnClick(object sender, RoutedEventArgs e)
        {
            var button = (Button) sender;

            var storyboard = (Storyboard) button.Resources["Storyboard"];

            storyboard.Begin();
        }

ScaleTransform Class (Windows.UI.Xaml.Media) - Windows UWP applications










标签:13,UWP,sender,Button,uwp,ScaleTransform,button,放大
From: https://blog.51cto.com/u_11283245/12278740

相关文章

  • 2024-10-17_Thu_13:52 - 财富目标:求其上者得其中
    2024-10-17_Thu_13:52-财富目标:求其上者得其中​​态势:攻与守有钱人玩金钱游戏是为了赢。穷人玩金钱游戏是为了不要疏。意念的力量很惊人!‍目标:求其上者得其中,求其中者得其下,求其下者无所得致富法则如果你的目标是过得舒服就好,你就很可能永远也不会有钱。但是如......
  • word 2013首页不显示页码,首页显示总页数设置方法
    在Word2013中,设置首页显示“共多少页”的页码信息,可以通过以下步骤来实现:一、插入页码打开Word2013文档,确保文档处于编辑状态。点击顶部菜单栏中的“插入”选项卡。在“页眉和页脚”组中,点击“页码”按钮。从下拉菜单中选择页码的位置(如页面底端)和样式(如“普通数字2”)。......
  • 2024-10-17_Thu_13:52 - 财富目标:求其上者得其中
    2024-10-17_Thu_13:52-财富目标:求其上者得其中​​态势:攻与守有钱人玩金钱游戏是为了赢。穷人玩金钱游戏是为了不要疏。意念的力量很惊人!‍目标:求其上者得其中,求其中者得其下,求其下者无所得致富法则如果你的目标是过得舒服就好,你就很可能永远也不会有钱。但是如......
  • CodeForces - 1364D
    通常的想法是:如果图是一棵树,那么通过对顶点进行双色染色,并从更频繁的颜色中选取顶点,就可以轻松找到大小为\(\lceil\frac{n}{2}\rceil\)的独立集合。否则,图就是循环的。让我们得到一个没有任何边“穿过”的循环。换句话说,它没有任何一对不相邻的顶点由边连接。如果它的长度最多......
  • .NET周刊【10月第2期 2024-10-13】
    国内文章C#/.NET/.NETCore优秀项目和框架2024年9月简报https://www.cnblogs.com/Can-daydayup/p/18457705文章介绍了多个与C#.NET和ASP.NET相关的优秀开源项目和框架,包括AvaloniaUI、WaterCloud、CodeMaid、NetCoreServer等。这些项目各具特色,涵盖UI设计、快速开发、代码简化......
  • java_day13_ArrayList、Vector、LinkedList、泛型
    一、ArrayListCollection[接口]:List[接口]:元素有序,可以发生重复,有索引的概念ArrayList[具体的子类]:底层数据结构是数组,查询快,增删慢,线程不安全,效率高。Set[接口]:元素无序且唯一,没有索引代码案例publicclassArrayListDemo1{publicstaticv......
  • CDR2024最新25.2.2.313官方离线特别版下载+永久注册机
    CorelDRAW(简称CDR)是一款专业的图形设计软件。该软件是加拿大Corel公司开发的一款功能强大的专业平面设计软件、矢量设计软件、矢量绘图软件。这款矢量图形制作工具软件广泛应用于商标设计、标志制作、封面设计、CIS设计、产品包装造型设计、模型绘制、插图描画、时装/服饰设计......
  • Python学习的自我理解和想法(13)
    学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码!今天是学Python的第13天,学的内容是模块入门以及pip引入,后面估计是一天一个模块。开学了,时间不多,写得不多,见谅。目录1.模块入门2.模块导入语法(1).import(2)form模块名import方法名或变量名(3)form模块名import*......
  • P1307 [NOIP2011 普及组] 数字反转
    P1307[NOIP2011普及组]数字反转提交483.96k通过196.21k时间限制1.00s内存限制128.00MB提交答案加入题单做题计划(首页)个人题单团队题单保存题目提供者CCF_NOI难度入门历史分数0 提交记录  查看题解标签NOIp普及组2011 查看算法标签进入讨论版相关讨论......
  • 清理Exchange 2013和2016的Log文件(精华)
    清理Exchange2013和2016的Log文件(精华)清理Exchange2013和2016的Log文件【摘要】在你的Exchange2013/2016的环境中,你可能会发现你的系统盘会很快被占用了很多空间,并且如果你不理会它的话,很快你的系统盘剩余空间就会告急了。这是因为Exchange2013/2016默认的日志记录行为导......