专栏首页林德熙的博客win10 uwp 拖动控件 Margin 移动Canvas 拖动控件Manipulation 拖动控件

win10 uwp 拖动控件 Margin 移动Canvas 拖动控件Manipulation 拖动控件

我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法。其中第一个是最差的,最后的才是我希望大神你去用。

Margin 移动

我们可以使用Margin移动,但这是wr说不要这样做。

We can move the control by Margin,but using this method is not recommended.

我们可以在xaml写一个Button,然后就使用左键获取鼠标,这个可以去看 win10 uwp 获取按钮鼠标左键按下

http://lindexi.oschina.io/lindexi/post/win10-uwp-%E8%8E%B7%E5%8F%96%E6%8C%89%E9%92%AE%E9%BC%A0%E6%A0%87%E5%B7%A6%E9%94%AE%E6%8C%89%E4%B8%8B/

于是在Button_OnPointerMoved,我们获取移动的xy

PointerPoint point = e.GetCurrentPoint(btn);

这样point.Position.X就是移动的左边

我们可以通过x += point.Position.X - btn.ActualWidth / 2.0;

这是因为btn.ActualWidth / 2.0不用的话会是控件的左上角。

我们把它给Margin

        private void Button_OnPointerMoved(object sender, PointerRoutedEventArgs e)
        {
            Button btn=sender as Button;
            if (btn == null)
            {
                return;
            }
            e.Handled = true;

            PointerPoint point = e.GetCurrentPoint(btn);

            if (point.Properties.IsLeftButtonPressed)
            {
                double x = (double)btn.GetValue(Canvas.LeftProperty);
                double y = (double)btn.GetValue(Canvas.TopProperty);
                x += point.Position.X - btn.ActualWidth / 2.0;
                y += point.Position.Y - btn.ActualHeight / 2.0;
                btn.Margin=new Thickness(x,y,0,0);
            }
        }

Canvas 拖动控件

我们需要把控件放在Canvas,然后使用Margin一样的

我们需要设置附件属性,btn.SetValue(Canvas.LeftProperty, x)就是设置Canvas.Left

        private void Button_OnPointerMoved(object sender, PointerRoutedEventArgs e)
        {
            Button btn=sender as Button;
            if (btn == null)
            {
                return;
            }
            e.Handled = true;

            PointerPoint point = e.GetCurrentPoint(btn);

            if (point.Properties.IsLeftButtonPressed)
            {
                double x = (double)btn.GetValue(Canvas.LeftProperty);
                double y = (double)btn.GetValue(Canvas.TopProperty);
                x += point.Position.X - btn.ActualWidth / 2.0;
                y += point.Position.Y - btn.ActualHeight / 2.0;
                btn.SetValue(Canvas.LeftProperty, x);
                btn.SetValue(Canvas.TopProperty, y);
            }
        }

Manipulation 拖动控件

我们可以使用手势,这个需要在控件设置ManipulationMode="All",使用ManipulationDelta

        private void Button_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
        {
            Button btn = sender as Button;
            if (btn == null)
            {
                return;
            }

            if (dragTranslation == null)
            {
                dragTranslation = new TranslateTransform();
            }

            btn.RenderTransform = dragTranslation;

            dragTranslation.X += e.Delta.Translation.X;
            dragTranslation.Y += e.Delta.Translation.Y;
        }

做好之后,我们发现实在奇怪

大神,请用力划。

大神:我的控件哪去?

控件:谁叫你那么用力

Canvas:我的左边可以长度无限。

……

好在OneWindows的帮助

参见:http://www.cnblogs.com/cjw1115/p/5323339.html


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dotnet 部署 github 的 Action 进行持续集成

    大概只需要 3 分钟就可以在 github 上通过 Action 部署持续集成,本文以 SourceYard 作为例子告诉大家如何配置

    林德熙
  • VisualStudio 2017 项目格式 自动生成版本号 添加注释防止警告生成的文件自动添加版本

    最近我把很多项目都使用了 VisualStudio 2017 新项目格式,在使用的时候发现一些比较好用的功能。 本文告诉大家如何使用 VisualStudio ...

    林德熙
  • dotnet core 获取 MacAddress 地址方法

    因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址

    林德熙
  • 06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 前面几节课,我们都是在前台创建对象,进行一些设置,那么我们为什么不用传统的方法来编程呢? 我...

    逸鹏
  • 商城项目-商品查询

    接下来,我们自己来实现一下,新建两个组件:MyGoods.vue和MyGoodsForm.vue

    cwl_java
  • 为什么老网站,关键词排名不稳定?

    我们知道百度对老网站的排名都会给于一定的排名优势,只要网站的价值较高,网站的排名都是比较稳定的,但我们在实战中也会遇到一些不走寻常路的老网站,已经有几年甚至十几...

    蝙蝠侠IT
  • 全面易用的镜像漏洞检测工具:Trivy

    相对于其它同类工具,Trivy 非常适合自动化操作,从 CircleCI 之类的公有服务,到企业内部使用的 Jenkins、Gitlab 等私有工具,或者作为开...

    崔秀龙
  • bootstrap的table插件动态加载表头【表头】。

    bootstrap的table属性已经很熟悉了,最近遇到一个问题,犹豫每个列表加载的数据需求不同,所以需要动态的更换表头。 网上有很多加载表格数据的例子,但是却...

    hotqin888
  • 大多数的大平台已经不允许出现外链了,发外链的我们该何去何从

    在进行网站优化的工作中时,外链是一个很难逃避的话题,很多人在吹外链没有或者外链已死,但事实上依然有很多SEOer选择进行外链建设,存在即合理,外链只不过是没有当...

    大脸猫
  • 外链建设:牢记七点注意事项

    我们继续学习外链基本背景知识,外链对于SEO来说非常重要,经过多个小企业网站SEO实战,才能充分理解链接精髓。外链帮助网站一遍又一遍地获得搜索引擎流量,我看到一...

    林雍岷

扫码关注云+社区

领取腾讯云代金券