wpf 進度條兩側圓角 WPF圓形進度條

2021-10-17 05:22:03 字數 1429 閱讀 3128

如下圖:分別對應著 老版本、新版本、現在

做東西之前 肯定先網上找找看,一搜尋一大堆連線,當然也有一些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...