++++++++++++++++++++++++++++++++++++++++++
本文系本站原創,歡迎轉載! 轉載請註明出處:
http://blog.csdn.net/mr_raptor/article/details/7259652
++++++++++++++++++++++++++++++++++++++++++
前言
前幾天做一個類似微博的項目,想用下Android和Iphone裡的下拉重新整理控制項,WP7裡肯定不會有這種控制項,只能自己去試著寫一寫,正好,前幾篇文章講完,講的是關於自訂控制項的,因此,將自己寫的WP7下的自訂下拉重新整理控制項拿出來分析下,作為前幾篇文章的總結。如果您覺得不錯,請頂一下,要源碼的朋友,下面回複跟上郵箱,作者在第一時間發送給你。
成果圖:
說明:Demo中是用了上下兩個的下拉重新整理控制項,上面的數字下拉重新整理控制項是將ListBoxItem靜態繫結上的,下面的控制項通過綁定機制綁定到對象上去的。
圖一,二是點擊不同的項,都可以得到項索引或項內容。
圖三,是當使用者下拉式清單時,上方顯示下拉重新整理動畫效果和提示文字。
圖四,是下拉時,下拉事件列印出的字串,說明可以回調使用者事件方法。
圖一 ListBoxItem待用資料綁定,點擊效果
圖二 動態對象資料繫結,點擊效果
圖三,下拉時,下拉動畫及提示顯示效果
圖四,下拉時,下拉事件回調輸出
原創地址:http://blog.csdn.net/mr_raptor/article/details/7259652
本控制項主要實現了以下功能:
- 支援動畫效果的下拉重新整理
- 支援動態綁定資料來源
- 支援靜態ListBoxItem綁定
- 支援ListBox自訂ItemTemplate模板
源碼: http://download.csdn.net/detail/mr_raptor/4591131
思路分析:
準系統:
如果想讓該控制項支援下拉重新整理列表,那麼就意味在列表的最上部要添加一個Control,在使用者沒有下拉式清單時,該Control不顯示,當使用者下拉式清單到一定的距離時,該Control顯示出來,並且有動畫效果。
- 解決Control選擇問題
- 解決使用者操作及距離計算問題
- 動畫效果添加
複雜功能:
我們還要讓我們的下拉重新整理控制項支援ListBoxItem的自訂,否則只能顯示單一的方式,因此,還要考慮和使用自訂模板的問題,除此之後,還有最重要的一個,當使用者下瓣列表時,必需要有一個事件處理,用來回調使用者定義方法來重新整理資料。
- 解決ListBoxItem模板自訂問題
- 解決重新整理事件處理問題
為解決上述兩部分,本博文分為兩節分別介紹,內容不可能太詳細,適合有一定基礎的朋友,讓我們開始吧。
原創地址:http://blog.csdn.net/mr_raptor/article/details/7259652
控制項類型選擇
要實現下拉式清單重新整理功能,那麼控制項裡必然要有顯示資料的列表,根據前面文章
WindowsPhone自訂控制項詳解(一)裡分析可知,ListBox清單控制項是繼承自ItemsControl,那麼,我們就的控制項肯定也是繼承自ItemsControl或ListBox了,但是繼承ListBox,通過自訂其Template,不太合適,因為那樣無法保證重新整理顯示區效果,所以我選擇繼承ItemsControl。
結構如下:
PullRefreshListBox.cs:
public class PullRefreshListBox:ItemsControl{public PullRefreshListBox() { this.DefaultStyleKey = typeof(PullRefreshListBox); }DependencyProperty SelectedItem{};DependencyProperty SelectedIndex{};DependencyProperty RefreshText{}; public override void OnApplyTemplate() {...}}
其中,加了三個相依性屬性:SelectedItem, SelectedIndex, RefreshText,分別表示,當前列表中選擇的Item項, 索引值,下拉重新整理顯示文字。
在OnApplyTemplate裡,得到對應的樣式檔案裡的元素引用。
原創地址:http://blog.csdn.net/mr_raptor/article/details/7259652
樣式模板:
樣式模板裡主要用來定義下拉重新整理控制項裡的布局,根據前面文章 WindowsPhone自訂控制項詳解(二)中基礎可知,修改控制項的布局應該是對其Template屬性進行自訂。
而在下拉式清單上部,要有一個用來裝動畫圖片,以及顯示的”正在重新整理“等文字的下拉重新整理效果地區,我用來表示我的布局。
下拉顯示容器和列表顯示容器我放到了一個Grid裡,上面的下拉容器中又分為左和右 兩部分,我用橫向布局StackPanel來放置,另外,由於下拉顯示容器在預設下是不顯示的,設定其隱藏屬性,當其顯示 時應該在列表容器上面,所以注意它們的順序。
PullDownPanel:下拉容器StackPanel
RefreshImage:動畫圖片Image
RefreshTextBlock:提示文字TextBlock
列表容器:ScrollViewer
清單項目:ItemsPresenter
對應的樣式檔案裡,結構如下:
Generic.xaml
<Style TargetType="local:PullRefreshListBox"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="local:PullRefreshListBox"> <Grid> <ScrollViewer x:Name="ScrollViewer" <ItemsPresenter x:Name="ItemsPresenter"/> </ScrollViewer> <StackPanel x:Name="PullDownPanel" Visibility="Collapsed" <Image x:Name="RefreshImage" Width="32" Height="32" Source="/PullRefreshListBox;component/Images/sync.png"> </Image> <TextBlock x:Name="RefreshTextBlock" Text="{TemplateBinding RefreshText}"></TextBlock> </StackPanel> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
樣式檔案裡定義了元素,所以在代碼檔案PullRefreshListBox.cs中的OnApplyTemplate方法裡添加如下代碼,用來得到這些元素的引用:
// PullDown Panel Container PullDownPanel = this.GetTemplateChild("PullDownPanel") as StackPanel; RefreshTextBlock = this.GetTemplateChild("RefreshTextBlock") as TextBlock; // The List ScrollViewer ScrollViewer = this.GetTemplateChild("ScrollViewer") as ScrollViewer; // The List Data items display Presenter _ItemsContainer = this.GetTemplateChild(ItemsPresenterName) as ItemsPresenter;
原創地址:http://blog.csdn.net/mr_raptor/article/details/7259652
到了這裡,基本結構已經搭完了,還沒有劇情,具體的劇情,下篇分解。
++++++++++++++++++++++++++++++++++++++++++
本文系本站原創,歡迎轉載! 轉載請註明出處:
http://blog.csdn.net/mr_raptor/article/details/7259652
++++++++++++++++++++++++++++++++++++++++++