【问题标题】:Draw text on a shape in a wpf在 wpf 中的形状上绘制文本
【发布时间】:2011-11-04 13:43:20
【问题描述】:

你们中的一些人可能会觉得这个问题很无聊,但我仍然不习惯 wpf 绘图。我想在画布上移动的矩形上添加格式化文本,并且我得到了覆盖 UIElement.OnRender 方法的提示。但是我不知道是否应该覆盖画布类或 Shape 类。在任何正确的情况下,示例中描述的方法的 drawingContext 参数指的是什么:http://msdn.microsoft.com/en-us/library/bb613560.aspx#FormattedText_Object?

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

有没有更有效的方法在形状上绘制文本?

【问题讨论】:

  • 形状是在程序运行时创建的,因此基于 xaml 的解决方案不能适用(据我所知)。我需要基于动态的解决方案,即使用 C#。
  • Draw text on a shape的可能重复
  • 几乎所有的XAML都可以轻松翻译成C#,应该没有问题。

标签: c# wpf drawing


【解决方案1】:

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

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

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

然后您可以对Label、Rectangle 应用您想要的任何格式,并且可以通过设置Grid 的位置来移动组

【讨论】:

    【解决方案2】:

    Rachel 的回答是正确的,尽管您可以对其进行一些扩展,但将一些 UserControl 定义为:

    并在代码隐藏中定义 1. Label:String DependencyProperty, Shape:UIElement DependencyProperty。

    处理 Shape 的 change 事件并调用:

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

    这样你就可以让事情变得动态。

    问候, 阿尔塔克

    【讨论】:

      【解决方案3】:

      您可能还想查看 ZIndex 属性,该属性可以设置在像 Grid 这样的对象上(例如,&lt;Rectangle Background="Black" Grid.ZIndex = 99 /> 会将其置于其他项目之上),这对于制作诸如“加载”屏幕之类的东西很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-11
        • 2011-04-03
        • 2013-12-01
        • 1970-01-01
        • 2017-09-12
        相关资源
        最近更新 更多