2010-11-15 23 views
3

我有一个自定义的WPF控件MyLine,它应该在中间代表一些文本。在WPF形状中添加一些文本

public class MyLine : Shape 
{ 
    public double X1, Y1, X2, Y2; 
    public bool IsTextDisplayed; 
    public string Caption; 

    protected override System.Windows.Media.Geometry DefiningGeometry 
    { 
     get 
     { 
      var geometryGroup = new GeometryGroup(); 

      if (IsTextDisplayed) 
      { 
       // calculate text point 
       var midPoint = new Point((X1 + X2)/2.0, (Y1 + Y2)/2.0); 
       // add 'Caption' text in that point 
       // ??? 
      } 

      // Add line 
      geometryGroup.Children.Add(new LineGeometry(
       new Point(X1, Y1), new Point(X2, Y2))); 

      return geometryGroup; 

     } 
    } 
} 

那么,我应该如何在这里添加文本?

回答

6

创建FormattedText对象,然后从它创建一个几何:

FormattedText ft = new FormattedText(
    "Caption", 
    Thread.CurrentThread.CurrentCulture, 
    System.Windows.FlowDirection.LeftToRight, 
    new Typeface("Verdana"), 32, Brushes.Black); 

Geometry geometry = ft.BuildGeometry(midpoint); 

geometryGroup.Children.Add(geometry); 
+1

我唯一的问题是,我的字体画有相同的“刷”的行...如果线宽2或3的文本是不可读的... – serhio 2010-11-15 12:26:12

+0

我可以添加一个textBlock或类似的东西吗? – serhio 2010-11-15 12:34:57

+0

@serhio你有没有想过一种方法来使用不同的笔刷文本?我正在使用这个问题和批准的答案来解决我遇到的同样的问题。看起来像Shape和Text在同一个GeometryGroup中是不可能的。 – Corpsekicker 2011-10-31 07:52:29