系列文章鏈接
- WPF進階技巧和實戰01-小技巧
- WPF進階技巧和實戰02-布局
- WPF進階技巧和實戰03-控件(1-控件及內容控件)
- WPF進階技巧和實戰03-控件(2-特殊容器)
- WPF進階技巧和實戰03-控件(3-文本控件及列表控件)
- WPF進階技巧和實戰03-控件(4-基於范圍的控件及日期控件)
- WPF進階技巧和實戰03-控件(5-列表、樹、網格01)
- WPF進階技巧和實戰03-控件(5-列表、樹、網格02)
- WPF進階技巧和實戰03-控件(5-列表、樹、網格03)
- WPF進階技巧和實戰03-控件(5-列表、樹、網格04)
- WPF進階技巧和實戰04-資源
- WPF進階技巧和實戰05-樣式與行為
- WPF進階技巧和實戰06-控件模板
- WPF進階技巧和實戰07--自定義元素01
- WPF進階技巧和實戰07--自定義元素02
- WPF進階技巧和實戰08-依賴屬性與綁定01
- WPF進階技巧和實戰08-依賴屬性與綁定02
- WPF進階技巧和實戰08-依賴屬性與綁定03
基於范圍的控件
WPF提供了3種范圍概念的控件,這些控件使用在特定最小值和最大值之間的數值,ScrollBar、ProgressBar、Slider,他們都繼承自RangeBase類(該類繼承自Control類)。RangeBase類定義的屬性:
名稱 | 說明 |
---|---|
Value | 控件的當前值,必須在最大值和最小值之間。默認是從0開始。屬性值不是整數,是double,可接受小數值。Value屬性值發生變化時,可響應ValueChanged事件 |
Maximum | 上限,允許的最大值 |
Minimum | 下限,允許的最小值 |
SmallChange | 最小變化(調整的數量)。小變化的含義與控件相關,對於ScrollBar和Slider控件,這是當使用箭頭鍵時值改變的量,對於ScrollBar控件,還可以使用滾動條兩端的箭頭按鈕 |
LargeChange | 最大變化(調整的數量)。大變化的含義與控件相關,對於ScrollBar和Slider控件,這是當使用PageUp和PageDown鍵或者單擊滑塊兩側時值改變的量 |
通常不直接使用ScrollBar控件,更高級的ScrollViewer控件封裝了兩個ScrollBar控件,Slider和ProgressBar控件更實用,經常被單獨使用。
Slider
當數字本身不是特別重要時,可使用該控件設置數值。比如通過滑動條上從一邊向另一邊拖動滑塊設置媒體播放器的音量是非常合理的。滑塊的大致位置指示當前相對音量,但是后面的數字對用戶沒有實際意義。Slider額外的屬性:
名稱 | 說明 |
---|---|
Orientation | 豎直滑動條和水平滑動條之間切換 |
Delay/Interval | 當單擊並按下滑動條的兩側,控制滑動塊沿軌跡移動的速度。這兩個屬性都是毫秒值。Delay是單擊后在滑塊移動一個單位之前的時間,而Interval是當繼續按住鼠標鍵時滑塊再次移動之前的時間 |
TickPlacement | 決定刻度顯示的位置,默認是None不顯示刻度標記。還有TopLeft和BottomRight兩種情況顯示 |
TickFrequency | 設置刻度之間的間隔,決定了顯示多少刻度。例如,可每隔5個單位放置一個刻度,每隔10個單位放置一個刻度等。 |
Ticks | 如果希望在特定的不規則位置放置刻度,可使用Ticks集合,簡單地為每個刻度標記向該集合添加一個數值 |
IsSnapToTickEnabled | 默認false,如果為true時,當移動滑動條時,會自動跳轉到合適的位置(最近的刻度) |
IsSelectionRangeEnabled | 如果為true,可使用選擇范圍使滑動條的一部分顯示陰影,使用SelectionStart和SelectionEnd屬性設置位置選擇范圍。選擇范圍沒有固有的意義,但可以因為任何有意義的目的而使用,如:媒體播放器有時使用陰影背景工具條指示媒體文件的下載進度 |
<Slider
Width="400"
VerticalAlignment="Center"
IsSnapToTickEnabled="True"
Maximum="{Binding DataStepMax}"
Minimum="{Binding DataStepMin}"
SmallChange="{Binding DataStepStep}"
TickFrequency="{Binding DataStepStep}"
Value="{Binding Step}" />
ProgressBar
該控件指示長時間運行任務的進度。不能與用戶進行交互。由代碼傳遞Value屬性值,無法響應鼠標動作或者鍵盤鍵入。通常方式是將它作為長時間運行的狀態指示器,甚至可能不知道該任務需要執行多長時間,可以通過IsIndeterminate屬性設置為true來完成這一工作(這時不再使用Minimum、Maximum和Value屬性)
<ProgressBar Height="20" Margin="0,5"
IsIndeterminate="True" Maximum="200"
Style="{StaticResource ProgressBarDanger}" Value="100" />
日期控件
WPF包含兩種日期控件:Calender和DatePicker。
Calender控件顯示日歷,與WIndows操作系統中看到的日歷相似,該控件每次顯示一個月份,允許從一個月份調到另一個月份,或者調到某個特定的月份(通過單擊月份的標題頭查看一年中的月份,然后單擊月份)
DatePicker控件需要的控件較少。它模仿簡單的文本框,該文本框以長日期或者短日期格式保存日期字符串。提供了一個下來箭頭,單擊時,會彈出完整的日歷視圖(同Calender)。
兩個控件提供屬性允許確定顯示哪些日期以及哪些如期可供選擇(以連續的范圍提供這些日期),可供使用的屬性:
名稱 | 說明 |
---|---|
DisplayDateStart DisplayDateEnd |
設置在日歷視圖中顯示日期范圍。從第一個最早的日期DisplayDateStart到最后的日期DisplayDateEnd。不能導航到未包含能夠顯示的日期的月份。為顯示所有日期,可將DisplayDateStart屬性設置為DateTime.MinValue,並將DisplayDateEnd設置成DateTime.MaxValue |
BlackoutDates | 保存在日歷中將被禁用或者不能選擇的日期集合。如果這些日期不在可顯示的日期范圍內,或者如果已經選擇了這些日期中的某個日期,那么將接收到異常。為阻止選擇過去的任何日期,可調用BlackoutDates.AddDatesInPass()方法 |
SelectedDate | 作為DateTime對象提供選擇的日期(或者在沒有日期選中時使用null值)可以通過代碼或者單擊日歷中的日期或者通過鍵盤輸入日期字符串設置該屬性。在日歷視圖中,選擇的日期使用具有陰影的方框標識,只有當日期控件具有焦點時才會顯示該方框 |
SelectedDates | 作為DateTime對象的集合提供選擇的日期。Calender控件支持該屬性,並且只有當修改SelectionMode屬性允許選擇多個日期時,該屬性才有用。 |
DisplayDate | 使用DateTime對象確定在日歷視圖中最初顯示的日期。如果該屬性是null,將顯示SelectedDate屬性的值。如果兩者都為null,則顯示當前日期。 |
FirstDayOfWeek | 確定在日歷中每行的開始位置(最左邊的位置)顯示一星期中的哪一天 |
IsTodayHighlighted | 確定日歷視圖是否通過突出顯示指出當前日期 |
DisplayMode (Calender控件) |
確定日歷最初的月份顯示模式。如果設置為Month,則顯示標准的單一月份視圖,如果是Year,則顯示當前年份中的月份,一旦單擊了某個月份,就顯示月份的完整視圖 |
SelectionMode (Calender控件) |
確定日期選擇類型。默認值是SingleDate,允許選擇單個日期。None(完全禁止選擇日期),SingleRange(可選擇一組連續的日期),MultipleRange(可選擇任意日期的組合)。在后兩種模式下,可以通過拖動選擇多個日期,或者當按下Ctrl鍵時通過單擊選擇多個日期,可使用SelectedDates屬性獲取所有選擇的日期集合 |
IsDropDownOpen (DatePicker控件) |
確定是否打開DatePicker控件中的下拉日歷視圖。可通過代碼設置該屬性顯示和隱藏日歷 |
SelectedDateFormat (DatePicker控件) |
確定在此控件文本部分顯示選擇的日期方式,可選擇Short或者Long,實際的顯示格式取決於客戶計算機的區域設置。長日期通常包含月份和天的名稱 |
日期控件提供了不同的事件,最常見的是DatePicker控件的SelectedDateChanged事件或者Calender控件的SelectedDatesChanged事件,該事件添加了對多個日期選擇的支持。
Calender控件還添加了DisplayDateChanged事件,DatePicker控件還添加了CalenderOpened和CalenderClosed事件(日歷控件打開或者關閉),DateValidationError事件(當用在文本輸入部分不能被轉換成合法的時間時觸發該事件)。