本文是将示範如何解析pptx檔案的多路徑的形狀轉換到WPF,繪制多個Shape的Path
這是Pptx的【标注:彎曲曲線(無邊框)】形狀的OpenXml定義部分:
然後以下OpenXml Shape Path的子屬性:
屬性
類型
備注
extrusionOk (3D Extrusion Allowed)
bool
指定使用 3D 拉伸可能在此路徑,預設false或0
fill (Path Fill)
PathFillMode
路徑填充模式:Norm(預設)、None、Lighten、LightenLess、Darken、DarkenLess
stroke (Path Stroke)
是否存在輪廓:預設false
h (Path Height)
int
指定架構的高度或在路徑坐标系統中應在使用的最大的 y 坐标
w (Path Width)
指定的寬度或在路徑坐标系統中應在使用的最大的 x 坐标
首先為什麼是要轉為多個Shape呢?因為OpenXml每條路徑,都能設定是否有輪廓、填充等屬性,而該屬性設定隻能在Shape層,而不能在Geometry層,就算是通過PathGeometry的PathFigure也隻能設定IsFilled(是否填充),不能設定IsStroke(是否有輪廓)
首先我們來建立對應Shape Path的類:
解析pptx形狀的關鍵代碼:
根據openxml的定義算出Shape Path:
将解析好的Shape Path轉為WPF的形狀Path:
然後渲染到界面:
pptx和WPF渲染結果對比:

我們會發現,pptx的形狀和wpf的形狀是一模一樣的,同樣的左邊線條的Path是無填充的,而右邊的矩形則是無輪廓有填充的
源碼位址