在wpf中的形状上绘制文本

时间:2011-11-04 13:43:20

标签: c# wpf drawing

你们中的一些人可能会发现这个问题很乏味但我仍然不习惯wpf绘画。我想在Rectangle上添加格式化文本,它在画布上移动,我有一个提示来覆盖UIElement.OnRender方法。但是我不知道是否应该覆盖canvas类或Shape类。在任何正确的情况下,参考示例中描述的方法的drawingContext参数:http://msdn.microsoft.com/en-us/library/bb613560.aspx#FormattedText_Object

文本最终是分配给形状还是视觉临时效果,不能随着画布上的形状一起移动?

是否有更有效的方法在形状上绘制文字?

3 个答案:

答案 0 :(得分:1)

您可以通过将两个控件放在允许控件重叠的父容器中来绘制矩形顶部的文本,例如GridCanvas

<Grid>
    <Rectangle Fill="Red" Stroke="Black" 
               HorizontalAlignement="Stretch" VerticalAlignment="Stretch" />

    <Label Content="Test"
           HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>

然后,您可以将所需的格式应用于LabelRectangle,然后您可以通过设置Grid

的定位来移动群组

答案 1 :(得分:0)

Rachel的回答是正确的,虽然你可以扩展一下,将一些UserControl定义为:                            

在codebehind中定义1. Label:String DependencyProperty,Shape:UIElement DependencyProperty。

处理Shape的更改事件并致电:

private void UpdateShape()
{
    grdShapeContainer.Children.Clear();
    if(this.Shape != null)
    {
        grdShapeContainer.Children.Add(this.Shape);
    }
}

通过这种方式,您可以使事物充满活力。

此致 Artak

答案 2 :(得分:0)

您可能还想查看ZIndex属性,该属性可以在Grid(<Rectangle Background="Black" Grid.ZIndex = 99 /&gt;等对象上设置,例如将其置于其他项目之上),这对于制作“loading”等内容非常有用“屏幕。