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

WPF 筆記:Canvas 絕對定位佈局與 ClipToBounds 裁剪

     編輯:關於.NET

Canvas 是 WPF 最原始的佈容器,提供**絕對座標定位**。書作者不建議常規 UI 使用 (因內容尺寸常隨字體/圖片動態變化),但特定場景 (繪圖、遊戲、拖放、固定版面) 不可或缺。

定位屬性

  • Canvas.Left / Canvas.Right:距左/右邊緣距離 (互斥,優先 Left)。
  • Canvas.Top / Canvas.Bottom:距頂/底邊緣距離 (互斥,優先 Top)。
  • 未設定者預設為 0。

代碼示例:雙錨點定位

<Canvas Background="Yellow">
  <TextBlock Canvas.Left="10" Canvas.Top="20">Hello</TextBlock>
  <TextBlock Canvas.Right="10" Canvas.Bottom="20">world!</TextBlock>
</Canvas>

行為觀察:調整視窗大小,第二個 TextBlock 位置隨之變化,**但與右/底邊緣距離恆定 (10, 20)**。這是「右/底錨點」特性。

ClipToBounds:內容裁剪開關

<Canvas Background="Yellow" ClipToBounds="True">
  <Ellipse Canvas.Left="80" Canvas.Top="80" Width="100" Height="100" Fill="Red" />
</Canvas>
<!-- Canvas 150x150 時,圓形右下 1/4 被裁剪 -->

配合 ViewBox 實現響應式固定佈局

<Viewbox Stretch="Uniform">
  <Canvas Width="800" Height="600">
    <!-- 固定座標繪圖/佈局 -->
  </Canvas>
</Viewbox>

邏輯座標系 (800x600) 固定不變,ViewBox 負責整體縮放適配螢幕,結合兩者優點。

Z-Index 控制重疊順序

<Canvas>
  <Rectangle Canvas.Left="10" Canvas.Top="10" Width="50" Height="50" Fill="Red" Canvas.ZIndex="1" />
  <Rectangle Canvas.Left="30" Canvas.Top="30" Width="50" Height="50" Fill="Blue" Canvas.ZIndex="2" /> <!-- 覆蓋紅色 -->
</Canvas>

適用場景總結

  • ✅ 向量繪圖、圖表渲染 (邏輯座標固定)
  • ✅ 遊戲場景、粒子系統 (高頻座標更新)
  • ✅ 拖放操作區域 (自由移動)
  • ✅ 固定版面列印預覽 (A4 等精確尺寸)
  • ❌ 表單、清單、自適應響應式 UI (請用 Grid/StackPanel)

Canvas 是「手術刀」而非「瑞士刀」—— 用對地方極其強大,濫用則維護地獄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
值行為預設
False超出 Canvas 邊界的內容**繼續顯示** (溢出可見)✓
True超出邊界內容**被裁剪**隱藏