首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 自訂繪圖進階(五):將繪圖轉為畫筆 - DrawingBrush 完整應用

     編輯:關於.NET

DrawingBrush:讓幾何圖形成為可重複使用的填充

WPF 畫筆體系強大,除純色、漸層外,DrawingBrush、`ImageBrush`、`VisualBrush` 屬於磁磚畫筆。DrawingBrush 可將任意 Drawing(幾何、圖片、文字、視訊組合)作為填充來源,套用於任何接受 `Brush` 的屬性(背景、筆觸、文字前景等)。

基本用法:幾何圖形合併並作為視窗背景

public Window1()
{
    InitializeComponent();

    // 建立幾何:橢圓 XOR 矩形
    EllipseGeometry ellipse = new EllipseGeometry(new Point(50, 50), 50, 20);
    RectangleGeometry rect = new RectangleGeometry(new Rect(50, 50, 50, 20), 5, 5);
    PathGeometry combin = Geometry.Combine(ellipse, rect, GeometryCombineMode.Xor, null);

    // 建立繪圖:填充色 + 筆觸
    GeometryDrawing drawing = new GeometryDrawing(Brushes.LightBlue, new Pen(Brushes.Green, 2), combin);

    // 轉為 DrawingBrush 並指派給視窗背景
    DrawingBrush background = new DrawingBrush(drawing);
    this.Background = background;
}

DrawingBrush 預設平鋪效果

控制平鋪:Viewport 與 TileMode

Viewport 定義繪圖在輸出區域的投影矩形(相對座標 0~1),TileMode 決定超出範圍如何重複。

background.Viewport = new Rect(0, 0, 0.15, 0.15); // 佔區域 15% x 15%
background.TileMode = TileMode.Tile; // 平鋪模式

Viewport 平鋪效果

裁剪觀察區域:Viewbox

Viewbox(繼承自 `TileBrush`)指定來源繪圖的哪一部分被投影(相對座標),類似相機取景框,不改變繪圖本身。

background.Viewbox = new Rect(0.5, 0.5, 0.5, 0.5); // 僅取右下 1/4 區域
// this.Background = background; // 效果見下圖

Viewbox 裁剪效果

座標模式:相對 vs 絕對

預設 `ViewportUnits`、`ViewboxUnits` 為 `RelativeToBoundingBox` (0~1)。設為 `BrushMappingMode.Absolute` 可使用實際像素座標。

結語

DrawingBrush 將程序化繪圖封裝為可重用、可平鋪、可裁剪的畫筆,極大豐富了 WPF 的填充表現力。結合 `Geometry.Combine` 布爾運算,能以極少代碼創建複雜紋理背景、UI 裝飾、列印報表水印等效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved