我曾预期以下两段XAML将产生相同的输出。然而,路径上的RenderTransform使用了一些我不明白的奇怪的旋转点。有人能给我解释一下为什么这两段XAML不是等价的吗?
<Window x:Class="CenterPathTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas>
<Canvas.RenderTransform>
<TranslateTransform X="50" Y="50"/>
</Canvas.RenderTransform>
<Border Width="100" Height="200">
<Border.RenderTransform>
<TransformGroup>
<TranslateTransform X="70" Y="-100"/>
<RotateTransform Angle="90"/>
</TransformGroup>
</Border.RenderTransform>
<Path Width="100" Height="200" Stretch="Uniform"
Data="M 0,20M 20,0M 6.04,4.51 C6.04,4.51 7.54,3 7.54,3 7.54,3 14.5,10 14.5,10 14.5,10 7.54,17 7.54,17 7.54,17 6.04,15.48 6.04,15.48 6.04,15.48 11.5,10 11.5,10 11.5,10 6.04,4.51 6.04,4.51 z" />
</Border>
</Canvas>
</Window>我认为这次的行为是不正确的:
<Window x:Class="CenterPathTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas>
<Canvas.RenderTransform>
<TranslateTransform X="50" Y="50"/>
</Canvas.RenderTransform>
<Path Width="100" Height="200" Stretch="Uniform"
Data="M 0,20M 20,0M 6.04,4.51 C6.04,4.51 7.54,3 7.54,3 7.54,3 14.5,10 14.5,10 14.5,10 7.54,17 7.54,17 7.54,17 6.04,15.48 6.04,15.48 6.04,15.48 11.5,10 11.5,10 11.5,10 6.04,4.51 6.04,4.51 z">
<Path.RenderTransform>
<TransformGroup>
<TranslateTransform X="70" Y="-100"/>
<RotateTransform Angle="90"/>
</TransformGroup>
</Path.RenderTransform>
</Path>
</Canvas>
</Window>发布于 2014-09-19 18:12:24
在第二个示例中,关于旋转点与Stretch属性相关的说法是正确的。要测试这一点,您可以更改XAML,以便两个示例都有Stretch="None",并且可以看到它们完全重叠。
你的第二个例子是一个关于如何不去做的很好的例子。)当您有一个path对象并以未知的数量拉伸它时,您的默认RenderTransformOrigin也会被拉伸/移动。
第一个示例按预期工作,因为您正在对尚未扩展或缩放的TranslateTransform对象执行Border和RotateTransform操作。然后,边框内的Path对象可以自由地扩展到所需的维度,而不会受到父对象( Border)上发生的转换的不利影响。
为了使第二个示例的行为与第一个示例相同,您需要计算出当Path被拉伸以满足您的100x200大小界限时发生的精确缩放因子。然后,您必须使用该数字来计算新的RenderTransformOrigin或计算TranslateTransform的新X和Y值。
..or..
改变Data在第二个Path对象绘制雪佛龙完全‘拉伸’大小最初。
考虑到这两种解决方案的复杂性,将Path留在Border对象中是目前为止最简单的路线。
https://stackoverflow.com/questions/25896291
复制相似问题