Я ожидал следующих двух частей XAML для получения того же выхода. Тем не менее, RenderTransform на пути использует некоторую фанк-точку вращения, которую я не понимаю. Может ли кто-нибудь объяснить мне, почему эти две части XAML не эквивалентны?Путь RenderTransform не равен границе с ним с помощью RenderTransform?
<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>
Вам не хватает вашего [RenderTransformOrigin] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransformorigin (v = vs.110) .aspx) (ака, ваш " funky rotation point "), поэтому объект не знает, как это началось, поэтому он знает, как закончить после того, как вы применили другие преобразования. –
'RenderTransformOrigin' по умолчанию 0,0. Это то, что я хочу. Я не могу использовать 'RenderTransformOrigin', чтобы установить начало для преобразования на пути, потому что я не знаю, что такое отношение к точке вращения. Кажется, это связано с «растяжкой» на пути. – Brannon
Нет, это должно происходить от родителя, который устанавливает свои относительные границы, и на самом деле вы обычно хотите .5, .5, так как это мертвая точка, иначе вы будете буквально выходить из угла. –