[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);
}
}
}
第一引数の配列のひとつめが実線の長さ、ふたつめが空白の長さ、みっつめが実線の長さ、という感じに指定できます。
ここで指定した順番でループしながら破線が描画されます。
おしまい。


ディスカッション
コメント一覧
まだ、コメントがありません