主頁 > .NET開發 > WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖

2020-11-21 20:34:16 .NET開發

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖

目錄 WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖 一、軟體介紹 二、Microsoft Expression Design 使用 三、微語言和 Path 繪圖 1、"注釋" 圖形(中括號) 2、"并行模式" 圖形(平行線) 3、"頁面內參考" 圖形(圓形)

獨立觀察員 2020 年 11 月 21 日

 

一、軟體介紹

最近接觸到一個流程圖畫圖軟體,基本功能都有,但是不確定其中的提供的流程圖完不完整,于是到在線畫圖網站 ProcessOn 上看了下,

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖

 

果然是缺少了幾項,比如這個 "注釋":

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖1

 

那么在 WPF 中如何添加圖形呢?一種自然是使用圖片,另一種則是使用 WPF 的 Xaml 語法生成圖形,之前提到的軟體是使用后者,本文探討的也是這種,

 

使用代碼(Xaml)生成圖形畢竟也不是那么容易的,所以有沒有什么簡單的方法呢?畢竟 Xaml 的設計初衷之一就是讓設計人員能夠有方法按照其原有的作業方式進行設計,然后能生成相應的 WPF 或其它程式能使用的界面資料,眾所周知,和 Visual Studio 同一家族的,還有個 Blend for Visual Studio,這個是用于做界面設計的,它能對界面效果做的設定項確實比 Visual Studio 多,但是如何使用它進行繪圖設計,本人還是不得要領,

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖2

 

有沒有像 PhotoShop 一樣能繪制圖形,然后又能匯出 Xaml 資料的軟體呢?還真有,叫做 Microsoft Expression Design,可以從 MSDN, 我告訴你 網站下載  Expression Studio 4,里面包含了這個,(附 Ultimate 版激活碼:6WDDQ-K7D4F-GQGF4-2VYBJ-8K6MB),另外,微軟已經放棄支持這套軟體了,不過不影響我們使用它,

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖3

 

二、Microsoft Expression Design 使用

下面來看看如何使用 Expression Design 4 來繪制之前說的注釋流程圖示志,

首先打開軟體,新建一個 60*50 的畫布(黑線框住的部分),然后拖一些標尺線來輔助定位:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖4

 

在左邊的工具列選擇 折線 工具:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖5

 

在如下圖的 1、2、3、4 四個點依次點擊,然后按 ESC 鍵,就形成了目標圖形,然后把線的寬度改為 5 像素:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖6

 

這就完成啦,可以匯出了,選擇檔案 -- 匯出,會彈出匯出視窗,具體可參考微軟的說明:

https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/design-tools/expression-studio-4/cc294753(v=expression.40)

 

匯出格式可選項中和 WPF 有關的一個是 XAML WPF 畫布:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖7

 

還有一個是 XAML WPF 資源字典:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖8

 

畫布匯出的是 Path 元素資料,資源字典匯出的是畫刷資源資料,不過可以看到兩者的關鍵資料(對于畫布來說就是 Path 的 Data 資料)是一致的:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖9

 

注意:本文探討的是使用畫布匯出的這種資料形式,也就是使用 Path 元素來繪制圖形,其 Data 中的字串資料是一種被稱為 微語言 的簡便表示方式,

 

言歸正傳,大家可以看到之前我們選擇 "要匯出的項" 時選的是 "選定物件",這就導致圖形沒有了邊距,所以我們可以選擇 "整個檔案" 來避免這種問題:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖10

 

這樣微語言資料中就體現出邊距了:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖11

 

至此,匯出的資料可以任君使用了,這種純粹的 Xaml 檔案還可以直接在瀏覽器中打開:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖12

 

三、微語言和 Path 繪圖

先看看《WPF 編程寶典》中關于微語言圖形命令的列舉:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖13

 

1、"注釋" 圖形(中括號)

我們拿出之前匯出資料的 Data 值:

F1 M 20,7.5625L 7.5,7.5625L 7.5,42.5L 20,42.5

 

F 命令設為 1 時具有穿透效果,此處可省略;太精細的小數位數可去除;所以可優化如下:

M 20,7.5 L 7.5,7.5 L 7.5,42.5 L 20,42.5

 

M 表示起點,L 表示直線,對應到圖上則如下:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖14

 

以上所示實際上是通過把線條加粗來形成圖形,所以無法再有描邊了,設定非透明填充后效果如下:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖15

 

而一般是要用細線條圍出圖形,這樣既有描邊又有填充,Path 的 Data 資料如下:

M 20,5 L5,5 L5,45 L20,45 L20,40 L10,40 L10,10 L20,10 Z

這里多出個 Z 命令,表示終點和起點相連形成封閉圖形,所以各命令和坐標對應到圖形上就是:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖16

 

效果如下:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖17

 

2、"并行模式" 圖形(平行線)

經過上一小節繪制 "注釋" 的程序可以看出,實際上熟練了之后,我們確實不需要使用 Expression Design 來匯出資料,只需要一個畫圖軟體來輔助確定一下坐標就行了,甚至再熟練一點,我們在腦海中就能確定坐標了,哈哈,

 

這一小節我們來畫下面這個 "并行模式",實際上就是兩條平行線:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖18

 

直接使用截圖軟體來畫圖了,確定下坐標: 

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖19

 

這個圖形需要兩個起點,所以微語言命令中出現了兩個 M:

M5,5 L55,5 L55,10 L5,10 Z M5,40 L55,40 L55,45 L5,45 Z

 

效果如下(改變了漸變方向):

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖20

 

3、"頁面內參考" 圖形(圓形)

頁面內參考 使用一個圓形來表示:

 WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖21

 

圓形需要使用畫圓弧的命令 A 來繪制,具體可參考網上的文章《WPF 使用 PATH 來畫圓》,以下為要點摘錄:

Data="https://www.cnblogs.com/weiliuhong/p/M 300,300 A 100,100 0 1 1 300,299 Z"

    M 300,300  表示起始坐標,字母 M 為 Move, 意思是將畫筆移到 300,300 處;

    A 100,100 0 1 1 300,299 這是圓弧的書寫語法,詳細格式如下:
        A 表示 Arc 圓弧,
        100,100 表示圓弧的 x, y 值,表示橢圓時表示大小半徑,圓是兩值相同;
        0 表示圖形的旋轉角度;
        1 當圖形設定了旋轉角度,并且大于 180 度時,才會生效,1 表示取大圓弧,0 表示取小圓弧;
        1 表示畫圓時筆畫是是順時針畫,需要逆時針時設定為 0;
        300,299 表示終止坐標,

    Z 表示路徑閉合,

 

我們這里將起點設為上邊的中間位置(30,0),半徑為 25,終止坐標不能和起點重合,所以做個微小的偏移(29,1),最后使用 Z 命令閉合,所以微語言命令如下:

M 30,0 A 25,25 0 1 1 29,1 Z

 

最終效果如下:

WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖插圖22

 

好了,就先到這里吧,算是拋磚引玉,

 

原創文章,轉載請注明: 轉載自 獨立觀察員?博客

本文鏈接地址: WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖 [http://dlgcy.com/wpf-expression-design-path-picture/]

微信公眾號  

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/226024.html

標籤:WPF

上一篇:WPF 使用 Expression Design 畫圖匯出及使用 Path 畫圖

下一篇:從 3.1 到 5.0 —— OpenReservation 更新記

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more