[WPF]Slider控件常用方法


WPF的Slider控件繼承自RangeBase類型,同繼承自RangeBase的控件還有ProgressBar和ScrollBar,這類控件都是在一定數值范圍內表示一個值的用途。

 

首先注意而RangeBase是基於浮點double類型的,不是基於整數int的,WPF中的許多度量單位都是基於浮點的。

 

對於Slider來說,RangeBase的Minimum(最小值)默認是0,Maximum(最大值)默認是10,Value(當前值)默認是0。

 

接下來就是RangeBase的剩余兩個變量,SmallChange和LargeChange。SmallChange用來當Slider有焦點時,使用鍵盤的左右箭頭來改變值的大小,而LargeChange則是點擊Slider條的空白部分造成值的改變大小(和滾動條類似)。

 

SmallChange默認是0.1,LargeChange默認是1。

 

注意由於浮點數的表示涉及到精度的問題,某些值的表示無法准確而只能存儲成近似值,所以一個空空的默認Slider會有如下問題:

 

首先XAML,一個默認Slider,下面一個TextBlock綁定Value屬性來顯示當前值:

<Slider Name="slider"/>

<TextBlock Text="{Binding ElementName=slider,Path=Value}"/>

 

運行程序,如果你從左往右按住右箭頭(這樣是SmallChange:0.1),結果會是:

 

而如果把值先設置成最右的10,然后按住左箭頭從右往左滑動,結果會是:

 

問題看到了吧,Slider不僅把內部丑陋的冗長小數顯示出來,而且還由於浮點數精度問題顯示的值還不一樣,上面兩個圖本來顯示的都是8.3這個數。

 

由於Slider是基於RangeBase的,后者又是基於浮點數的,所以滑動值時作出的改變肯定是按浮點數的方式改變的,改變后的結果不一定是整數,為此我們可以吧Slider分成一段一段的,然后每一個段代表一個整數,讓Slider僅在這些段中滑動,這個段就是Slider中所謂的”Tick”。具體每段的間隔可以用TickFrequency來設置,這個TickFrequency默認已經是1的,但是為了讓Slider在Tick中移動,還需要設置IsSnapToTickEnabled屬性。

 

這樣的話:

<Slider Name="slider" IsSnapToTickEnabled="True"/>

<TextBlock Text="{Binding ElementName=slider,Path=Value}"/>

 

結果就是無論怎樣移動Slider的位置,值都會是整數。

 

不過Slider的Tick默認是不顯示的,TickPlacement默認是None,通過調節TickPlacement,我們可以讓Slider的Tick顯示出來:

<Slider Name="slider" IsSnapToTickEnabled="True" TickPlacement="Both"/>

 

結果:可以看到由於TickPlacement設置成了Both,Slider上下出現了兩列小點代表Tick。

 

 

上面都是按照TickFrequency均勻分布的Tick,Slider還有一個Ticks屬性(類型是DoubleCollection)可以完全自定義所有Tick,Ticks被定義后,TickFrequency就沒有意義了,如下代碼:

<Slider Name="slider" IsSnapToTickEnabled="True" TickPlacement="Both" Ticks="0.5 1.0 1.5 3.0"/>

 

仔細觀察Slider,它的Tick會按照Ticks屬性的定義變成這樣:

 

有了上述知識,我們可以把WPF得Slider控件調整地再人性化一些,如下代碼:

<StackPanel>

    <UniformGrid Columns="3" Rows="1" Margin="1">

        <TextBlock Text="{Binding ElementName=slider,Path=Minimum}"

                   TextAlignment="Left"/>

        <TextBlock Text="{Binding ElementName=slider,Path=Value}"

                   TextAlignment="Center"/>

        <TextBlock Text="{Binding ElementName=slider,Path=Maximum}"

                   TextAlignment="Right"/>

    </UniformGrid>

    <Slider Name="slider"

            IsSnapToTickEnabled="True"

            TickPlacement="TopLeft"

            />

</StackPanel>

 

運行結果:

 

 

最后WPF的Slider還支持把一部分范圍的選項高亮化(也就是所謂的SelectionRange:選擇范圍),沒有什么實際意義,僅僅是界面上的高亮,不過還是很有意思的。實現需要設置Slider的IsSelectionRangeEnabled為True,接着設置SelectionStart和SelectionEnd來標記具體范圍。

 

如下代碼:

<Slider Name="slider" IsSnapToTickEnabled="True" TickPlacement="Both"

       IsSelectionRangeEnabled="True"

       SelectionStart="2" SelectionEnd="5"/>

<TextBlock Text="{Binding ElementName=slider,Path=Value}"/>

 

運行結果:

 

 

另外Slider控件還有Direction屬性可以調節顯示方向,IsDirectionReversed屬性反轉方向,Delay屬性控制內部RepeatButton的重復時段還有一些關於提示框的顯示設置,這些屬性相對使用上比較少見(或者較好理解)這里就不多講了,讀者可以根據需求瀏覽MSDN。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM