【WPF學習】第二十四章 基於范圍的控件


  WPF提供了三個使用范圍概念的控件。這些控件使用在特定最小值和最大值之間的數值。這些控件——ScrollBar、ProgressBar以及Slider——都繼承自RangeBase類(該類又繼承自Control類)。盡管它們使用相同的抽象概念(范圍),但工作方式卻又很大的區別、

  下表顯示了RangeBase類定義的屬性:

表 RangeBase類的屬性

 

   通常不比直接使用ScrollBar控件。更高級的ScrollViewer控件(封裝了兩個ScrollBar控件)通常更有用。Slider和ProgressBar控件更實用,他們經常單獨使用。

一、Slider

  Slider控件是偶爾用到的特殊控件——例如,當數字本身不是特別重要時可使用該控件設置數值。再比如,通過在滑動條上從一邊向另一邊拖動滑塊設置媒體播放器的音量是非常合理的。滑塊的大致位置指示相對音量(正常、小音量、大音量),但對於用戶來說背后的數字沒有意義。

  簡單的Slider示例效果如下所示:

<Window x:Class="Controls.SliderTest"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SliderTest" Height="300" Width="300">
    <StackPanel>
        <TextBlock Margin="10" TextWrapping="Wrap">
      A Delay of 0 and Interval of 1 make this a fast slider.
      Try clicking on either side of the thumb and holding down
      the mouse button.</TextBlock>

        <Slider Margin="10" TickFrequency="1" TickPlacement="TopLeft" 
            Maximum="10" Delay="0" Interval="1"
          >
        </Slider>

    </StackPanel>
</Window>
SliderTest

 

   Slider控件的重要屬性在RangeBase類中定義的。除這些屬性外,還可以使用下表中列出的所有屬性。

表 Slider類的附加屬性

 

   下圖比較了使用不同刻度設置的Slider控件:

<Window x:Class="Controls.SlidersCompared"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SlidersCompared" Height="300" Width="408.271">
    <Grid>
        <StackPanel Margin="10">
            <TextBlock Margin="0,0,0,5">Normal Slider (Max=100, Val=10)</TextBlock>
            <Slider Maximum="100" Value="10"></Slider>
            <TextBlock Margin="0,15,0,5">Slider with Tick Marks (TickFrequency=10, TickPlacement=BottomRight)</TextBlock>
            <Slider Maximum="100" Value="10" TickFrequency="10" TickPlacement="BottomRight"></Slider>
            <TextBlock Margin="0,15,0,5">Slider with Irregular Tick Marks (Ticks=0,5,10,15,25,50,100)</TextBlock>
            <Slider Maximum="100" Value="10" Ticks="0,5,10,15,25,50,100"  TickPlacement="BottomRight"></Slider>
            <TextBlock Margin="0,15,0,5" TextWrapping="Wrap">Slider with a Selection Range (IsSelectionRangeEnabled=True, SelectionStart=25, SelectionEnd=75)</TextBlock>
            <Slider Maximum="100" Value="10" TickFrequency="10" TickPlacement="BottomRight"
                IsSelectionRangeEnabled="True" SelectionStart="25" SelectionEnd="75"></Slider>
        </StackPanel>
    </Grid>
</Window>
SlidersCompared

 

 二、ProgressBar

  ProgressBar控件指示長時間運行任務的進度。與Slider控件不同,ProgressBar控件不能與用戶進行交互。反而,需要由代碼遞增Value屬性值(從技術角度看,WPF規則建議不將ProgressBar作為控件,因為它無法響應鼠標動作和鍵盤輸入)。ProgressBar控件具有4個設備無關單位的最小高度。如果希望看到更大、更傳統的進度條,需要設置Height屬性(或將它放入具有適當固定尺寸的容器中)。

  使用ProgressBar控件的通常方式是將它作為長時間運行的狀態指示其,甚至可能不知道該任務需要執行多長時間。有趣的是(也很奇特),可通過將IsIndeterminate屬性設置為true來完成這一工作:

<ProgressBar Height="50"  IsIndeterminate="True"></ProgressBar>

  最終效果如下圖所示:

 

   當設置IsIndeterminate屬性時,不再使用Minimum、Maximum和Value屬性。ProgressBar控件會周期性地顯示從左向右跳動的綠色脈沖,這是通用的Windows約定,表示工作正在進行中。在應用程序的狀態欄中,這種指示器非常合理。例如,可使用它指示正在連接遠程服務器以便獲取信息。


免責聲明!

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



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