这个问题,相信大部分同学都知道,实现这个效果,只需要对Canvas上的子元素进行坐标换算。

先看下常规的做法,可能是:

//frameworkElement
Canvas.SetLeft(frameworkElement,left - frameworkElement.ActualWidth/2);
Canvas.SetTop(frameworkElement,top - frameworkElement.ActualHeight/2);

但是这种方法,虽然可以实现,但是它不太好放到xaml上去实现,也没有那么方便。

当然微软也会遇到这样的一个问题,所以他们偷偷的实现了一种方法来实现这种逻辑,但是:就不告诉你

没关系,微软不告诉你,我告诉你。请看具体实现:

前台xaml演示代码

    <Canvas>
        <Rectangle Height="100" Width="150" Fill="Red" Margin="-100000"/>
    </Canvas>

显示效果:

效果图

聪明的小伙伴可以发现,其实实现这个功能非常简单,只需要在Margin上设置一下属性值为-100000即可。

是不是很黑科技呢?


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/WPF-%E5%A6%82%E4%BD%95%E5%9C%A8Canvas%E4%B8%8A%E5%AE%9E%E7%8E%B0%E5%85%83%E7%B4%A0%E6%8C%89%E4%B8%AD%E5%BF%83%E7%82%B9%E5%9D%90%E6%A0%87%E4%BD%9C%E4%B8%BA%E7%9B%B8%E5%AF%B9%E5%9D%90%E6%A0%87.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系