WPF MultiRangeSlider 簡單實現

2022-01-23 17:07:48 字數 1267 閱讀 7695

wpf中的multirangeslider,網上有商業的,有開源的,找了幾個都不太理想,那就自己寫

乙個吧,給大家提供點思路。

wpf中的slider,看他的模板那就很複雜,如果想弄乙個可以自定義樣式的multirangeslider

那就得花大時間好好弄,粗略的想multirangeslider不就是幾個滑塊(thumb),加幾個矩形麼,

乙個滑塊對應兩個矩形,滑塊移動的時候,不就兩邊的矩形的寬度的變化麼,矩形我們只想

關注寬度變化,不想再去調整他的其實位置,用什麼容器來裝矩形呢,stackpanel,裡面的物件

總是首尾相連的嘛,可是要使thumb能夠水平移動,在stackpanel中顯示不合適,那就放到canvas

中,然後把這兩個容器使用grid疊在一起,canvas在上,就是下面這個樣子

滑塊為了好看,也做了樣式修改

為了簡便,我用了usercontrol來實現這個控制項,當然得支援各種資料binding啊,對於這個控制項來說,

我不需要知道外面是什麼樣的資料結構,我只需要知道我要展現多滑塊需要哪些資料就行,

所以得有乙個描述range的資料結構

public class rangeitem

set}

public double to

set}

/// /// 是否靜止

///

public bool isstatic

set}

public double duration

set}

public double maxduration

set}

#endregion

}重要的屬性有from(起始值),to(結束值),maxduration(總長),

根據這乙個資料,我們就能生成乙個矩形。整個slider的寬度是固定的,所以就可以根據

(to-from)/maxduration*slider長度,就能計算出這個矩形的寬度,直接加入stackpanel就

行。矩形加進去了,現在加滑塊,因為滑塊是在canvas中的,所以他需要確切知道canvas.left附加

屬性,這個left不就左邊矩形的寬度麼。在把滑塊和左右兩邊的矩形關聯起來,因為矩形的拖動事件

需要實時去改變兩邊的矩形的寬度。

我還是直接上**吧,講這麼多你們也不一定清楚,哎。

wpf multirangeslider

簡單的Apache URL Rewrite例項

下面開始講如何設定url rewrite.apache 伺服器 比如我們有新聞頁 news readmore.php?id 4875 我們要做成靜態頁 news top2007,4875.html 首先進入apache的目錄找到名為httpd.conf的檔案。本站為 apache2.2 conf h...

閉鎖CountDownLatch的簡單實現

public class testcountdownlatch catch exception e finally t.start system.out.println c start.countdown 到達此處時,由於finally中已經呼叫了三次countdown 方法,計數已經是0了 所以此...

springboot整合redis簡單實現

1.引入jar包 org.springframework.boot spring boot starter data redis 2.1.10.release org.apache.commons commons pool2 2.4.3 2.properties 引數配置 spring.redis....