Ich berechne die Position einfach über die Transformationsmatrix. Nachfolgen ein Beispiel eines Rechtecks, welche in einem im Canvas vorgegebenem Bereich gedreht wird.
XAML:
<Window x:Class="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"
xmlns:my="clr-namespace:WpfApplication1">
<Window.Resources>
<my:ViewModel x:Key="vm" />
</Window.Resources>
<Canvas Name="cv">
<Button Canvas.Left="100" Canvas.Top="10" Content="Rotate" Click="Button_Click" />
<Line X1="200" Y1="100" X2="10" Y2="10" Stroke="Blue" StrokeThickness="1"/>
<Line X1="0" Y1="100" X2="300" Y2="100" Stroke="Black" StrokeThickness="1"/>
<Rectangle Name="rec" Canvas.Left="200" Canvas.Top="100" Width="30" Height="20" Fill="Red" />
</Canvas>
</Window>
Dazu der Codebehind:
Imports System.Collections.ObjectModel
Class MainWindow
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Dim p1 = rec.TranslatePoint(New Point(0, 0), cv)
Dim trans As New RotateTransform(45, 0, 0)
rec.LayoutTransform = trans
Dim p2 = rec.LayoutTransform.Transform(New Point(0, rec.Height))
Dim l As New Line
With l
.X1 = 300
.Y1 = 10
.X2 = 200 - p2.X
.Y2 = 100
.Stroke = New SolidColorBrush(Colors.Red)
.StrokeThickness = 1
End With
cv.Children.Add(l)
End Sub
End Class
--
Peter