C# 绑定到WPF画布上元素的X Y坐标
我有一张画有两个“点”的画布。请参阅此(简化)代码:C# 绑定到WPF画布上元素的X Y坐标,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我有一张画有两个“点”的画布。请参阅此(简化)代码: 如您所见,我想使用给定的RotateTransform旋转画布 接下来,我想在每个椭圆(标签)附近放置一个文本块。但是,我不想将这个文本块包含到画布中,因为它随后也会旋转。我希望文本保持水平 你知道如何优雅地解决这个问题吗?好问题!我会猜,所以请对这个答案稍加保留 我相信您正在尝试将文本批注放置在旋转画布上的椭圆旁边,但这些批注需要保持水平。你可以尝试两件事: 首先,给定Canvas.GetTop/GetLeft中每个椭圆的XY点,您可
如您所见,我想使用给定的RotateTransform旋转画布
接下来,我想在每个椭圆(标签)附近放置一个文本块。但是,我不想将这个文本块包含到画布中,因为它随后也会旋转。我希望文本保持水平
你知道如何优雅地解决这个问题吗?好问题!我会猜,所以请对这个答案稍加保留 我相信您正在尝试将文本批注放置在旋转画布上的椭圆旁边,但这些批注需要保持水平。你可以尝试两件事:
- 首先,给定Canvas.GetTop/GetLeft中每个椭圆的XY点,您可以通过将旋转变换应用于椭圆位置来找到其新的旋转XY位置,使用公式U=M*V,其中U是输出点,V是输入点(椭圆的XY位置),M是旋转矩阵
- 其次,您可以在第一个画布上放置第二个画布(假设它们都在网格中,第二个画布的Z索引较高,并且与基础画布的大小相同)。称之为注释层。您的注释(文本标签)可以显示在新转换的位置,并使用此方法取消旋转
<TextBlock RenderTransform="{Binding RelativeSource={RelativeSource AncestorType=Canvas},
Path=RenderTransform.Inverse}"/>
为文本框转换矩阵
指定画布
转换矩阵的逆
<TextBlock RenderTransform="{Binding RelativeSource={RelativeSource AncestorType=Canvas},
Path=RenderTransform.Inverse}"/>