[C# WPF] 描画範囲を制限する

描画時にクリップする方法のまとめです。

スポンサーリンク

キャンバス単位でクリップする

キャンバス単位でクリップする方法は簡単で、キャンバスのClipToBoundsプロパティをtrueにするだけです。

<Canvas ClipToBounds="True"/>

これでキャンバス内での描画がキャンバスの外側にはみ出さなくなります。

DrawingContextでクリップする

キャンバスを増やしたくない場合にはこちら。
OnRender()のタイミングでDrawingContext.PushClip()を使用することで、DrawingContextへの描画にクリップをかけることができます。

protected override void OnRender(DrawingContext drawingContext)
{
    // キャンバスの左上から幅200, 高さ100の領域にのみ描画する
    var clipGeometry = new RectangleGeometry(new Rect(0, 0, 200, 100));
    drawingContext.PushClip(clipGeometry);

    // なにかの描画処理

    drawingContext.Pop();
}

OnRender()の中で複数の箇所に描画を行う場合に役に立つことがあります。
描画をクリップするだけなので、描画処理自体はクリップ範囲外まで行っても問題はありません。
クリップ範囲外にある2点を繋いだ直線を描画するときとか便利です。

おしまい。

スポンサーリンク