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

WPF 筆刷與鋼筆全解析:六大筆刷類型、TileBrush 佈局、DrawingBrush/VisualBrush、Pen 輪廓控制

     編輯:關於.NET

色彩表示:scRGB 與 16 位通道

  • Color 結構:R/G/B/A 四通道,各 16 位(0~65535),支援浮點 ScR/ScG/ScB/ScA (0.0~1.0)。
  • 超越傳統 8 位 sRGB,滿足高動態範圍、電影級、醫療影像需求。
  • scRGB (IEC 61966-2-2) 為場景參考色彩空間,保留原始捕獲資訊,優於輸出參考空間。
  • Colors 類提供標準命名色彩(PapayaWhip、BurlyWood...)。

六大筆刷類型

筆刷特色典型用途
SolidColorBrush單一顏色填充,支援透明度最常用,XAML 直接寫色彩名稱自動建立
LinearGradientBrush直線漸層,多色停點按鈕背景、立體感、深度
RadialGradientBrush放射狀漸層(橢圓邊界)光暈、反射、曲面感
ImageBrush位圖圖片填充紋理、背景圖、相片
DrawingBrush向量繪圖填充(GeometryDrawing 等)可縮放不失真的複雜圖案
VisualBrush任意 Visual 子樹作為筆刷倒影、縮圖、動態 UI 鏡像

漸層筆刷細節

LinearGradientBrush

  • StartPoint/EndPoint:相對單位 (0,0)~(1,1) 定義漸層向量。
  • GradientStops:Offset (0~1) + Color 定義多色停點。
  • 速記語法:Fill="LinearGradient 0,0 1,1 Black White"、VerticalGradient Black White、HorizontalGradient Black White。

線性漸層

多色停點漸層

RadialGradientBrush

  • Center、RadiusX/Y 定義橢圓邊界;GradientOrigin 定義焦點(預設中心)。
  • 焦點偏移可產生光源偏移效果。

放射漸層參數

三橢圓構建立體按鈕

TileBrush 基類:ImageBrush/DrawingBrush/VisualBrush 共享的佈局屬性

  • Stretch:Fill(預設,扭曲填滿)、None(原始大小,裁切)、Uniform(保持比例縮放至內含)、UniformToFill(保持比例填滿,裁切溢出)。
  • TileMode:None、Tile、FlipX、FlipY、FlipXY(鏡像鋪貼減少接縫明顯度)。
  • AlignmentX/Y:Left/Center/Right、Top/Center/Bottom 定位。
  • Viewbox:選取來源區域 (相對座標)。
  • Viewport:定義目標繪製區域;ViewportUnits:RelativeToBoundingBox(預設) 或 Absolute。

Stretch 模式比較

Uniform+Tile

FlipX/Y/XY 鋪貼

UniformToFill

Alignment 定位

Viewbox 選取區域

Viewbox/Viewport 對應關係

DrawingBrush:向量筆刷,任意縮放銳利

  • 內容為 Drawing(GeometryDrawing、ImageDrawing、VideoDrawing、GlyphRunDrawing、DrawingGroup)。
  • 每個 GeometryDrawing 可獨立指定筆刷與 Pen,適合重疊而非合併的形狀。
  • 範例 7-39 以 28 行 XAML 重現圖 7-35 效果(同樣效果用 LinearGradientBrush 只需 10 行)。
  • 優點:運行時資源消耗低、動畫更平滑;缺點:XAML 冗長、需直接操作 Geometry。

DrawingBrush Viewbox 裁切

VisualBrush:最靈活,直接嵌入 UI 樹片段

  • VisualBrush.Visual 可放任意繼承 Visual 的元素(Grid、Button、ListBox...)。
  • 範例 7-41 直接複製 Grid 結構,比 DrawingBrush 簡潔。
  • 用途:倒影效果、縮圖預覽、3D 貼圖動態 UI。
  • 效能:比 DrawingBrush 高(每個 Visual 完整 FrameworkElement 開銷),但設計時效率最高。

Pen:輪廓繪製的完整控制

  • 基於筆刷(Brush 屬性)+ Thickness 寬度。
  • DashArray:雙數陣列定義實線/間隙長度序列(奇數長度會交替實/虛)。
  • LineJoin:Miter(尖角)、Bevel(斜角)、Round(圓角)。
  • StartLineCap/EndLineCap:Flat、Square、Round、Triangle。

DashArray=1 虛線

DashArray 複雜樣式

LineJoin 三種

LineCap 四種

高階 Shape 元素自動對應 Pen 屬性

表 7-1:Stroke→Brush、StrokeThickness→Thickness、StrokeDashArray→DashArray 等。直接操作 Pen 僅在低階(DrawingBrush/OnRender)需要。

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