首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >路径RenderTransform不等于它周围的边界与RenderTransform?

路径RenderTransform不等于它周围的边界与RenderTransform?
EN

Stack Overflow用户
提问于 2014-09-17 16:58:18
回答 1查看 1.7K关注 0票数 1

我曾预期以下两段XAML将产生相同的输出。然而,路径上的RenderTransform使用了一些我不明白的奇怪的旋转点。有人能给我解释一下为什么这两段XAML不是等价的吗?

代码语言:javascript
复制
<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>

我认为这次的行为是不正确的:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 18:12:24

在第二个示例中,关于旋转点与Stretch属性相关的说法是正确的。要测试这一点,您可以更改XAML,以便两个示例都有Stretch="None",并且可以看到它们完全重叠。

你的第二个例子是一个关于如何不去做的很好的例子。)当您有一个path对象并以未知的数量拉伸它时,您的默认RenderTransformOrigin也会被拉伸/移动。

第一个示例按预期工作,因为您正在对尚未扩展或缩放的TranslateTransform对象执行BorderRotateTransform操作。然后,边框内的Path对象可以自由地扩展到所需的维度,而不会受到父对象( Border)上发生的转换的不利影响。

为了使第二个示例的行为与第一个示例相同,您需要计算出当Path被拉伸以满足您的100x200大小界限时发生的精确缩放因子。然后,您必须使用该数字来计算新的RenderTransformOrigin或计算TranslateTransform的新X和Y值。

..or..

改变Data在第二个Path对象绘制雪佛龙完全‘拉伸’大小最初。

考虑到这两种解决方案的复杂性,将Path留在Border对象中是目前为止最简单的路线。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25896291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档