01 Viewbox
Viewbox与border类似,可以接受一个子元素,并对子元素进行缩放。Viewbox较多的应用场景是对形状进行缩放处理,例如在Canvas面板中绘制了Ellipse椭圆,当Viewbox的size变化时,椭圆能够跟随变化。而绘制形状具有精确的坐标,即形状是具有固定的大小。如果没有Viewbox,形状的尺寸是不会跟随变化的。
左侧的圆形在Viewbox下,会随着窗体的大小变化而变化,而右侧在窗体变化时,并不会自动改变。由此可以看到,Viewbox在自身size变化时,会按照比例对子元素进行缩放。
需要注意的是,viewbox的子元素必须具有显式的size,否则不显示。
02 Transform
每个控件都具有RenderTransform属性,其作用是通过改变控件的坐标系统来使外观发生变化,例如平移、翻转、倾斜、缩放等。与动画结合,可以实现很多常见效果,例如加载动画,就是通过绘制ellipse和控制rotatetransform动画,并控制ellipse的可见性即可实现。
最后总结,viewbox主要用来对其子元素进行缩放,在自身大小变化时,子元素能够跟随变换,子元素通常来放置绘制元素。Transform通过改变坐标系统来改变元素的位置等属性。
回到最初的问题,需求是图片能够像手机地图那样进行放大和缩小,那么图片的缩放显然改变ScaleTransform的ScaleX和ScaleY就可以实现了。