Textblock动态放置WPF

时间:2014-05-28 06:19:49

标签: c# wpf textbox wpf-controls textblock

我有一个文本数据。我想动态地将数据放到某一点[绝对点,它可能是(0,0)(10,10)或(100,100)]。

问题来了。我的要求是文本块的中心点应该是基点。如何制作并直接放在画布上? [这意味着对齐文本块的绝对点和中心点]。因为在winforms中我们可以设置alignment属性并直接放置它。 Please check this question。它描述了如何在将文本块放在画布上后移动文本块,因为可以找到实际的宽度。

我有两个具体问题

  1. 是否可以在WPF中执行此操作
  2. 无论如何都要在放置之前找到实际的宽度,以防我可以像在其他问题中那样做
  3. 更新(进一步说明):::::这是放置文本的数据模板,我可以使用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);
    }
    

0 个答案:

没有答案