如下圖:分別對應著 老版本、新版本、現在
做東西之前 肯定先網上找找看,一搜尋一大堆連線,當然也有一些ui框架帶這樣的控制項,我看了幾個,各種類和樣式繼承類,主要是和他們自己框架結合一起。僅僅為了乙個控制項,那樣做 簡單問題複雜化。下面是單獨介紹的一些有用鏈結.
但是介於專案好多不能直接使用,因為有些功能不全,不能滿足要求。 比如起點的位置,有人喜歡在頂部開始,而有的從左邊開始,我還見過從右邊開始的,有的順時針,有的逆時針 ,所以得自己做些擴充套件。
剛開始要實現這些功能覺得挺費勁.
1、圓環被分割了
2、圓環圓角開始和結束,給人感覺要重新繪製
主要是當時不知道的太多,說一下難點處理方式,也是本篇文章重點至少對於我來說是這樣.
1、圓環被分割 主要是不清楚strokedasharray,這個屬性其實很多地方用過不知道path也有,常見的是虛邊框矩形
新版中 只需要乙個開始點和結束點就可以實現功能了,strokedasharray設定分割,strokethickness設定圓弧寬度
2、圓環圓角開始和結束這個問題 真耽誤2 3小時, 新版中是畫乙個弧線, 而我要實現圓角,畫四個弧線,也就需要知道4個點,
把之前的**邏輯和思路全都換了,位置計算不准畫的弧不圓滑,
另外進度100%的時候圓角開始和圓角結束重合,即path有重合就透明了, 平時combinedgeometry合併用的是2個,
而這次有四個路徑 於是逐個屬性查詢 ,最終pathgeometry上設定fillrule = fillrule.nonzero, 搗鼓不少時間功能是滿足了 。
搞完之後覺得有些知識自己還是不太清楚,比如上面提到的合併之前是沒有這樣用過,於是就多了解一下path,這一了解給我大驚一下, 明明一句**搞定的事情,我花費3小時,在那改寫**,瞬間一萬個後悔,為什麼不先看,為什麼不先看, 為什麼不先看!
這個鬼東西就是: strokestartlinecap="round" 、strokeendlinecap="round
設定這2個屬性後,之前**不用變化,於是把這2個屬性也公開了,整個系統可以只用乙個控制項。
順便提一下:strokelinejoin屬性,也是改變連線處形狀,除了開始和結束。
最後希望有類似需求的人,能幫助到你,如果當時要是先知道這些能省時間。人一生時間有限,寫**的時間更有限。
模擬如下圖:
WPF手繪進度條
話說現在的專案中我要用進度條了。本想用自帶的那個processbar控制項,可是樣式不好看,加上自己本事有限,對wpf中的樣式相當的不熟。只好想別的辦法了。不知哪根兒神經一動,我想到了用rectangle控制項。知道這個控制項的一定就知道我是怎麼想的了。具體通過dispatchertimer類實現。...
繼續聊WPF 進度條
progressbar控制項與傳統winform使用方法完全一樣,我們只需關注 minimum 最小值,預設為0 maximum 最大值,預設為100.value 當前值。關鍵是它的控制項模板,因為系統的預設主題不好看,很多時候我們是需要自定義樣式和模板。老方法,先看定義 templateparta...
繼續聊WPF 進度條
progressbar控制項與傳統winform使用方法完全一樣,我們只需關注 minimum 最小值,預設為0 maximum 最大值,預設為100.value 當前值。關鍵是它的控制項模板,因為系統的預設主題不好看,很多時候我們是需要自定義樣式和模板。老方法,先看定義 從類定義中看到,progr...