我有一个文本数据。我想动态地将数据放到某一点[绝对点,它可能是(0,0)(10,10)或(100,100)]。
问题来了。我的要求是文本块的中心点应该是基点。如何制作并直接放在画布上? [这意味着对齐文本块的绝对点和中心点]。因为在winforms中我们可以设置alignment属性并直接放置它。 Please check this question。它描述了如何在将文本块放在画布上后移动文本块,因为可以找到实际的宽度。
我有两个具体问题
更新(进一步说明):::::这是放置文本的数据模板,我可以使用TranslateTransform在文本放置在画布上时使用下面提到的MoveToPoint函数翻译文本。
真正的问题是,如何在datatemplate中传递ActualWidth到MoveToPoint,
XAML
<DataTemplate DataType="{x:Type local:Text}">
<TextBlock Text="{Binding Description}"
FontSize= "{Binding Thickness}"
RenderTransformOrigin="0.5,0.5"
Foreground="#FFF63AFF"
FontWeight="Bold" >
<TextBlock.RenderTransform>
<TransformGroup>
<TranslateTransform X= "{Binding StartPoint.X}" Y= "{Binding StartPoint.Y}" />
<RotateTransform Angle= "{Binding Angle}" />
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
</DataTemplate>
C#
void MoveToPoint(UIElement sender, Point point)
{
Canvas.SetLeft(sender, point.X - sender.RenderTransformOrigin.X * sender.ActualWidth);
Canvas.SetTop(sender, point.Y - sender.RenderTransformOrigin.Y * sender.ActualHeight);
}