代わりにDrawingGroup
を使用できます。それはDrawingContext
を返すOpen
メソッドを持ち、それを使って図面を構築することができます。
次に、その図面が何らかの形でUIに表示されるように調整する必要があります。最も簡単な方法は、DrawingBrush
にラップし、それを使用してUIの既存の要素をペイントすることです。あなたはmyEllipse
と呼ばれる楕円を持っている場合たとえば、これは含まれていDrawingGroup
に基づいDrawingBrush
するそのFill
プロパティを設定しますFormattedText
の単一ビット:
var drawing = new DrawingGroup();
using (var context = drawing.Open())
{
var text = new FormattedText("This is some text",
CultureInfo.CurrentCulture,
FlowDirection.LeftToRight,
new Typeface("Calibri"),
30,
Brushes.Green);
context.DrawText(text, new Point(0, 0));
}
var db = new DrawingBrush(drawing);
db.Stretch = Stretch.None;
myEllipse.Fill = db;
すでにEllipse
を満たしている場合何か他のものと、2つの選択肢があります。この図面にコンテンツを追加することもできます。コンテキストには、好きなだけ多くの呼び出しを行うことができます。例えば、私はすぐにcontext.DrawText
への呼び出し前にこれを追加した場合:
context.DrawRectangle(Brushes.Cyan, null, new Rect(0, 0, 300, 100));
は、私は、テキストの背後にあるシアンの背景を取得します。 (あなたのレイアウトに合わせて、これらの例の座標を調整する必要があります。)
しかし、要素にピギーバックするのではなく、図面をホストする余分な要素を追加する方が簡単かもしれませんそれは他に何かをするためのものです。だからRectangle
要素をEllipse
のすぐ上に配置し、(これはのようにこれを使用します)をRectangle
として使用します。 Rectangle
は、実際には長方形に見えません。これは、このDrawingBrush
がその全領域にペイントしないためです。したがって、効果は、をEllipse
に重ねた場合と同じように見えます。