Большая проблема в том, что ваша ширина будет равна нулю.Шкалы X и Y являются факторами.Как в мультипликаторах.Все времена, когда ноль равен нулю.Следовательно,
ScaleTransform(0, -1);
даст вам что-то без ширины.
Вы, вероятно, хотите иметь такую же ширину и, следовательно,:
ScaleTransform(1, -1);
Это может иметь еще одну проблему, если выхотите, чтобы объект был перевернут по центру, но, по крайней мере, он должен отображаться при его использовании.
Расчет CenterY, возможно, менее очевиден.Вы можете определить высоту геометрии, используя ее границы.
Поскольку вы создаете новую геометрию пути, возможно, вы хотите сохранить оригинал без какого-либо преобразования.
Я собрал некоторый код вместекоторый управляет геометрией из ресурсов и использует ее для добавления пути к холсту.
Разметка:
<Window.Resources>
<Geometry x:Key="Star">
M16.001007,0L20.944,10.533997 32,12.223022 23.998993,20.421997 25.889008,32 16.001007,26.533997 6.1109924,32 8,20.421997 0,12.223022 11.057007,10.533997z
</Geometry>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button x:Name="myButton" Click="MyButton_Click">
</Button>
<Canvas Grid.Column="1" Name="myCanvas"/>
</Grid>
Код
private void MyButton_Click(object sender, RoutedEventArgs e)
{
Geometry geom = this.Resources["Star"] as Geometry;
Geometry flipped = geom.Clone();
var bounds = geom.Bounds;
double halfY = (bounds.Bottom - bounds.Top) / 2.0;
flipped.Transform = new ScaleTransform(1, -1, 0, halfY );
PathGeometry pg = PathGeometry.CreateFromGeometry(flipped);
var path = new System.Windows.Shapes.Path {Data=pg, Fill= System.Windows.Media.Brushes.Red };
this.myCanvas.Children.Add(path);
}