[C# WPF] StreamGeometryで破線を描画する
StreamGeometryで破線の描画をしたくなったのですが、Penオブジェクトへの設定での破線描画を調べると、Drawing.Penを使用する場合の設定方法ばかり出てきたので、Media.Penを使用する場合のサンプルを残しておきます。
WPFには、Penオブジェクトが2種類あります。
- System.Windows.Media.Pen
- System.Drawing.Pen
それぞれ、破線を描画するためのDashStyleの設定方法が違います。
Geometryを使用する場合、DrawGeometry()へ指定できるのはWindows.Media.Penの方です。
もくじ
サンプルコード
StreamGeometryを使用して、UserControlのOnRender()で描画したサンプルです。
Xaml側には何もしていないので、ここには載せていません。
using System.Windows; using System.Windows.Controls; using System.Windows.Media; namespace Sample_StreamGeometryDashStyle { /// <summary> /// MyView.xaml の相互作用ロジック /// </summary> public partial class MyView : UserControl { public MyView() { } protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); // 破線を描画するPenの生成 Point pt = new Point(); Pen pen = new Pen(); pen.Brush = Brushes.Green; // DashStyleを設定する // 生成時の第一引数で破線の間隔を指定します DashStyle dashStyle = new DashStyle(new double[] { 7, 7 }, 0); pen.DashStyle = dashStyle; StreamGeometry geometry = new StreamGeometry(); using (StreamGeometryContext context = geometry.Open()) { pt.X = 0; pt.Y = 0; context.BeginFigure(pt, false, false); pt.X = ActualWidth; pt.Y = ActualHeight; context.LineTo(pt, true, true); } geometry.Freeze(); drawingContext.DrawGeometry(null, pen, geometry); } } }
第一引数の配列のひとつめが実線の長さ、ふたつめが空白の長さ、みっつめが実線の長さ、という感じに指定できます。
ここで指定した順番でループしながら破線が描画されます。
おしまい。
ディスカッション
コメント一覧
まだ、コメントがありません