我在XAML中描述了一些形状,主要是曲线。它们中的一些在边缘处具有填充物,通过将它们放置在比形状大Canvas
的位置来实现。这个Canvas
充当边界框。
例如,此形状在Designer中显示如下。形状是曲线。外部正方形是边界Canvas
,由红色箭头表示。
<Canvas Height="160"
Width="160"
Background="Red">
<Path Stroke="#000000"
Data="M27.9,108 c0,0 25,-63 48.5,-51.5 s34.5,64.5 68.5,37">
</Path>
</Canvas>
现在我需要缩放Canvas
及其形状以动态调整较大的Canvas
,同时保持形状Geometry
相对于其边界Canvas
,同时保持Stroke.Thickness
。
这是形状在没有缩放的情况下显示的方式(边界Canvas
为红色,Canvas
我需要缩放为黄色):
这是如何处理缩放,但不更改Stroke.Thickness
。我在这里使用ViewBox
:
我忽视了这个问题的解决方案吗?
我怀疑唯一的解决方案是将形状的Path.Stretch
设置为Fill
,更改其Height
和Width
,然后将Margin
应用于边界Canvas
复制填充,听起来非常可怕。
答案 0 :(得分:1)
您只需将Path.Stretch
属性设置为Fill
,几何图形就会自动缩放到形状的大小。不幸的是,当几何体被拉伸时,它也被修剪了#34;到最小边界框,因此您将松开几何体周围的边距,但您始终可以将Path.Margin
设置为所需的值。此外,您应该完全放弃包裹Canvas
。
但是,根据具有所需效果的图像判断,您还希望边距与几何体本身一起缩放。在这种情况下,设置Path.Margin
不会切断芥末 - 边距将保持不变&#34;。幸运的是,有一个简单的技巧可以解决这个问题 - 你需要做的就是在几何体中加入边距。要做到这一点,你只需要添加两个&#34;空&#34;移动到几何体,这将定义所需边界框的两个相对点。在您的情况下,如果您希望形状的标称尺寸为160x160,并自动缩放以适应可用空间,您只需要:
<Path Stroke="#000000"
Data="M0,0 M160,160 M27.9,108 c0,0 25,-63 48.5,-51.5 s34.5,64.5 68.5,37"
Stretch="Fill" />
Path
没有Background
属性,所以你可能想要用Border
包裹它。