这个问题,相信大部分同学都知道,实现这个效果,只需要对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/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。