2016-07-19 45 views
0

私は通常winformベースのC#を使用していますので、WPFの適切な基本概念がないと思います。この矩形領域に見えるこのGeometryDrawing上にテキストを描画するにはどうすればいいですか?WPFでGeometryDrawingを使用してテキストを描画する

Brush brush = new SolidColorBrush(Colors.BlueViolet); 
brush.Freeze(); 
Brush penBrush = new SolidColorBrush(Colors.Red); 
penBrush.Freeze(); 
Pen pen = new Pen(penBrush, 0.5); 
pen.Freeze(); 

//draw a square with the created brush and pen 
System.Windows.Rect r = new System.Windows.Rect(0, 0, 100, 30); 
Geometry g = new RectangleGeometry(r); 
GeometryDrawing drawing = new GeometryDrawing(brush, pen, g); 

drawing.Freeze(); 

DrawingImage drawingImage = new DrawingImage(drawing); 
drawingImage.Freeze(); 

_image = new Image(); 
_image.Source = drawingImage; 
+0

正確に何をしたいですか? wpfを使用してテキストを含む矩形を描きたいのですか? –

+0

GeometryDrawingとDrawingImageを使用する特別な理由はありますか?これは、テキストを長方形の領域に配置するためのWPFの「典型的な」方法ではありません。 – Clemens

+0

このコードは、MSVS-New Project-Extensibility-EditorのViewport Adormentのサンプルコードです。私はちょうど矩形の上にテキストを描画するために少しそれを変更する必要がありました。 –

答えて

1

これは、使用しようとしている非常に低いレベルのAPIです。通常、そこに自分のフォーム上のテキストを視覚的に配置するシンプルな選択肢がありますが、あなたはImageSourceを取得したい確信している場合、これは道のようになります。

var visual = new DrawingVisual(); 
using (var ctx = visual.RenderOpen()) 
{ 

    //rectangle 
    ctx.DrawGeometry(brush, pen, r); 

    //text 
    var text = new FormattedText("Hello world!", 
     CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, typeface, 11, Brushes.Black); 
    text.MaxTextWidth = r.Rect.Width; 
    text.MaxTextHeight = r.Rect.Height; 

    ctx.DrawText(text, r.Rect.TopLeft); 
} 
RenderTargetBitmap rtv = new RenderTargetBitmap(pixelWidth, pixelHeight, 96.0, 96.0, PixelFormats.Default); 
rtv.Render(visual); 
rtv.Freeze(); 

_image = new Image(); 
_image.Source = rtv; 
関連する問題