Windows Phone 7 開發 31 日談——第21日:Silverlight Toolkit for Windows Phone
By Jeff Blankenburg
本文是“Windows Phone 7 開發 31 日談 ” 系列的第21日。
在昨天討論了地圖控制元件之後,我突然想到你可能 還 不知道Silverlight Toolkit為你提供了大量的 控制元件。今天的文章就來講解Silverlight Toolkit for Windows Phone ,另外,還會說到Silverlight 3 Toolkit 。
什麼是工具包?
在最初的Silverlight 3工具包 中有一大堆可以用在專案中的額外控制元件。包含的控制元件從圖表(Chart)到手風琴檢視(Accordion),從日期選擇器(Date Picker)到自動完成輸入框(Autocomplete Box)。這個工具包最棒的地方就是它完全相容我們用Silverlight寫的Windows Phone應用程式。
Silverlight Toolkit for Windows Phone與之類似,但它包含了額外的一些可以用在Windows Phone程式中的控制元件。它們是:
- ContextMenu
- DatePicker & TimePicker
- GestureListener
- ToggleSwitch
- WrapPanel
在本文下面的內容中我會為工具包中的每種控制元件都提供一個例子,不過我還是強烈建議你仔細研究Silverlight 3 Toolkit 。這裡有大量可以用在你的專案中的控制元件,示例和程式碼。我會在後面的文章中介紹工具包中的圖表控制元件,但是你需要耐心等待,當然你也可以現在就開始研究它。
ContextMenu 控制元件
如果你試過將某個程式別到起始頁上,你就會看到ContextMenu在起作用。下面是我在將Internet Explorer放到模擬器起始頁面時的樣子(按下並保持就會顯示這個選單):
為了讓這個選單出現,我們需要使用Silverlight工具包中的ContextMenu控制元件。和本文所有的例子一樣,我們需要在專案中新增Silverlight工具包的程式集。你可以在這看到:
新增程式集後,還要在XAML頁中新增名稱空間。將這個名稱空間新增到檔案頂部的<phone:PhoneApplicationPage>標籤中:
- xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
現在可以進入正題了。讓我們找一個能為使用者提供更多選項的控制元件,矩形。我們可能會有一個使用者想與之互動的形狀,圖片或圖示等等。也可能對這個矩形我們要做更多的事(想想右擊選單)。通過向矩形新增一個ContextMenu,可以在使用者點選物件並保持時彈出一個選單。它可以是任何XAML元素,所以你甚至可以在應用程式的背景,全景檢視或按鈕中應用此控制元件。下面是如何使用它的XAML程式碼:
- <Rectangle Width="100" Height="100" Fill="Red">
- <toolkit:ContextMenuService.ContextMenu>
- <toolkit:ContextMenu>
- <toolkit:MenuItem Header="this is menu item 1" Click="MenuItem_Click" />
- <toolkit:MenuItem Header="this is menu item 2" Click="MenuItem_Click" />
- <toolkit:MenuItem Header="this is menu item 3" Click="MenuItem_Click" />
- </toolkit:ContextMenu>
- </toolkit:ContextMenuService.ContextMenu>
- </Rectangle>
通常我們要使用ContextMenuService,在特定的控制元件上新增ContextMenu。你可以看到每一項都有一個Click事件,允許將這些選單項與程式碼相關聯。下面是我的ContextMenu截圖:
如果你在模擬器中測試這個程式,可能會注意到背景中的內容都縮小了一點,好像陷入了背景中,將選單呈現在了使用者所注視的正前方。當然你可能不需要這個動作,那麼在<toolkit:ContextMenu>項中有一個IsZoomEnabled 特性。將它設定為false可以停止自動的縮放動畫。為XAML元素新增這種類似右擊選單的內容很簡單。這可能是6個控制元件中最常用的控制元件了(除非GestureService不能用了)。
DatePicker 和TimePicker控制元件
在我為本文準備例子時,這兩個控制元件給我帶來了一個有趣的挑戰。它們是如此的簡單以至於我都不知道我哪兒做錯了。事實上,還真是有點兒小魔力。一會兒我會解釋。首先,看看如何將這些控制元件新增到頁面中。這很簡單:
- <toolkit:DatePicker Value="7/22/1976" />
- <toolkit:TimePicker Value="12:02 AM" />
當你新增這些控制元件到頁面中後,它們可以如介紹地那樣工作。它們允許使用者選擇一個日期(以你提供的初始日期開始……如果你沒有提供,它預設使用“今天”的日期)。下面是每個控制元件的截圖:
好了,現在來看看這些控制元件帶給我的複雜問題。你會注意到上面截圖中的工具欄。還有兩個圖示(沒有圖片)。在我幾番思索之後,我知道了它們是完成和取消 按鈕(你還可以在點選省略號(…)圖示時發現它們。它們會向上滑動並顯示文字標籤)。
為了讓這些圖示能真正工作,你需要按照下面的步驟操作:
- 在你的專案中建一個根目錄,命名為“Toolkit.Content”。
- 在這個目錄中新增兩個帶特定名字的圖片
- 要確保這兩個圖片的Build Action已被設定為“Content”。如果你沒這麼做,請點選圖片,然後在屬性標籤中修改。
遵從上述步驟後,它就能工作了!下面是可以正常使用的程式截圖:
GestureListener 控制元件
從Windows Phone 7開發31日談開始到目前為止,你可能一直在想什麼時候能找到在程式中處理使用者手勢的方法。就在今天!(免責宣告:這是其中的“一種方法”。其實有很多種方法來處理手勢,但無疑這是最簡單的一種,如果你是一路讀下來的就會發現這是這個系列所推崇的。用最簡單的方法實現Windows Phone中的內容。但這未必是你要一直遵從的最佳實踐。)
好了,其他的都說清楚了,讓我們來討論GestureListener吧。和ContextMenu很像,我們要讓GestureService知道我們建立了一個GestureListener ,然後通常要為我們期待的特定手勢配備事件處理程式。記住是在XAML元素中應用它,所以手勢只會在被應用的控制元件中才能被識別。GestureListener支援以下手勢:
- Tap
- DoubleTap
- Hold
- Flick
- Pinch
- Drag and Drop
每一個手勢都是以這種方法實現的,實現起來非常簡單。收縮和拖拽操作還有一些細節(通常Delta過程介於手勢開始和完成之間)。下面是XAML程式碼(在另一個矩形中):
- <Rectangle Width="100" Height="100" Fill="Blue">
- <toolkit:GestureService.GestureListener>
- <toolkit:GestureListener
- DoubleTap="DoubleTapped"
- Tap="Tapped"
- Hold="Held"
- DragStarted="DragStart"
- DragDelta="DragDelta"
- DragCompleted="DragEnd"
- Flick="Flicked"
- PinchStarted="PinchStart"
- PinchDelta="PinchDelta"
- PinchCompleted="PinchEnd" />
- </toolkit:GestureService.GestureListener>
- </Rectangle>
正如你所見,我定義了所有需要去識別的手勢,並將相應的事件處理程式 賦 給它們,在Silverlight Toolkit for Windows Phone 的程式碼示例中,有很多關於如何處理這些事件的好例子。
ToggleSwitch 控制元件
如果你更改過模擬器的日期/時間就可能看到過這個控制元件。下面是例子:
將它新增到頁面中非常簡單:
- <toolkit:ToggleSwitch Header="Receive updates automatically"/>
在上面的截圖中寫的是“24-hour clock”,我的例子將會寫著“Receive updates automatically”。很幸運,On/Off文字是自動為你處理的。如果你想對這個控制元件做一些定製也是很簡單的。我們可以利用HeaderTemplate和ContentTemplate來使這個控制元件更加“自我”。還有Checked和Unchecked事件,它們在操作開關時被觸發。(這個控制元件和CheckBox很相似)。下面是一個使用示例(並繫結到了資料來源):
- <toolkit:ToggleSwitch Header="12:02 AM">
- <toolkit:ToggleSwitch.HeaderTemplate>
- <DataTemplate>
- <ContentControl FontSize="{StaticResource PhoneFontSizeLarge}" Foreground="{StaticResource PhoneForegroundBrush}" Content="{Binding}"/>
- </DataTemplate>
- </toolkit:ToggleSwitch.HeaderTemplate>
- <toolkit:ToggleSwitch.ContentTemplate>
- <DataTemplate>
- <StackPanel>
- <StackPanel Orientation="Horizontal">
- <TextBlock Text="Alert: " FontSize="{StaticResource PhoneFontSizeSmall}"/>
- <ContentControl HorizontalAlignment="Left" FontSize="{StaticResource PhoneFontSizeSmall}" Content="{Binding}"/>
- </StackPanel>
- <TextBlock Text="every weekday" FontSize="{StaticResource PhoneFontSizeSmall}" Foreground="{StaticResource PhoneSubtleBrush}"/>
- </StackPanel>
- </DataTemplate>
- </toolkit:ToggleSwitch.ContentTemplate>
- </toolkit:ToggleSwitch>
最後是WrapPanel。它的目的很明顯,因為它是標準控制元件集中赫然缺失的控制元件。
WrapPanel 控制元件
WrapPanel基本上是帶很多額外特性的StackPanel。幾個月前我在建立了一個遊戲,我想在一個螢幕裡面放置30個按鈕。因為那時還沒有WrapPanel,我不得不去動態的建立一個Grid,然後再將每個按鈕放在Grid中的某個位置上。這些工作比我想象的要多得多,而僅僅是為了在一個5 x 6的佈局中放30個按鈕。現在WrapPanel幫我們解決了這個問題。
在下面的例子中,我在一個WrapPanel中放置了12個按鈕:
- <toolkit:WrapPanel>
- <Button Width="75" Height="75" Content="1" />
- <Button Width="75" Height="75" Content="2" />
- <Button Width="75" Height="75" Content="3" />
- <Button Width="75" Height="75" Content="4" />
- <Button Width="75" Height="75" Content="5" />
- <Button Width="75" Height="75" Content="6" />
- <Button Width="75" Height="75" Content="7" />
- <Button Width="75" Height="75" Content="8" />
- <Button Width="75" Height="75" Content="9" />
- <Button Width="75" Height="75" Content="10" />
- <Button Width="75" Height="75" Content="11" />
- <Button Width="75" Height="75" Content="12" />
- </toolkit:WrapPanel>
在下面的截圖中,你可以看到WrapPanel動態決定在每一行如何安放它們,並在第一行下面堆疊。不會發生重疊(很像StackPanel),而且不用擔心內容的尺寸會將你的佈局搞砸。下面是截圖:
在我下面的程式碼示例中,你會看到我為Button 1和Button 2配備了事件處理程式。它們可以讓所有按鈕的尺寸放大或縮小。在把玩這個例子時應該仔細看看WrapPanel是如何動態移動你的內容的,尤其是在執行時。下面是相同程式碼的截圖,只不過其中的按鈕被刻意地放大了:
好了,就是這些!我們講解了Silverlight Toolkit for Windows Phone中5個全新的可用控制元件。請在今天就下載它,因為你會發現很快就會用到它。
下載示例程式碼
在這個示例程式碼中,你可以找到Silverlight Toolkit for Windows Phone 中每一個控制元件的例子。在第31日時,我會介紹Silverlight 3 Toolkit,以及如何在WP7應用程式中使用圖表。
相關文章
- Windows Phone SDK 8/8.1 官方下載Windows
- Windows Phone應用效能監控與分析技巧Windows
- Windows Phone 8初學者開發—第13部分:設定LongListSelector中磁貼的樣式Windows
- 微軟官方Windows Phone、Windows 10 Mobile裝置恢復工具被曝遭到移除微軟Windows
- 深入理解Windows Phone 8.1 UI控制元件程式設計WindowsUI控制元件程式設計
- Win10系統如何禁用Windows Phone-PC連結Win10Windows
- windows10系統設定和使用Your Phone應用的方法Windows
- Codeforces 1017 CThe Phone Number
- What is a mobile phone film cutting machine?Mac
- Leetcode 17 Letter Combinations of a Phone NumberLeetCode
- Leetcode – 017. Letter Combinations of a Phone NumberLeetCode
- 天貓公佈雙11資料:Phone XS Max銷量比Phone XS多10倍
- 關於開發者協議Edit Phone Number終極解決方案協議
- LeetCode Letter Combinations of a Phone Number(017)解法總結LeetCode
- 7月31日,HarmonyOS開發者日將於杭州舉辦
- 微軟Windows Community Toolkit一覽微軟WindowsUnity
- 「日常訓練」Phone Numbers (CFR466D2C)
- 華碩ROG Phone遊戲手機發布:可外接散熱風扇遊戲
- 演算法練習--LeetCode--17. Letter Combinations of a Phone Number: 100%演算法LeetCode
- 5.9安卓開發日記31安卓
- 7月18日—7月24日共有31款遊戲開測|GameRes遊戲GAM
- Windows 10 終於幹掉了 Windows 7!Windows
- RTK(The Reconstruction ToolKit)在Windows系統下的安裝StructWindows
- [開發教程]第31講:Bootstrap對話方塊boot
- 開發日誌7
- 7月31日,羅布樂思開發者大會,“正版元宇宙”來了!元宇宙
- 修改帝國cms手機端模板位於 /e/api/template/phone 目錄API
- Win10系統下解除安裝Your Phone應用程式的方法Win10
- 淺談 Xamarin Community Toolkit 的未來發展Unity
- windows開發genieacs環境搭建Windows
- GOLang開發環境搭建(Windows)Golang開發環境Windows
- DirectX11 With Windows SDK--31 陰影對映Windows
- windows下tftp命令,windows 7 如何使用 tftp 和 telnet 命令WindowsFTP
- 圖譜謎宮(2019年7月31日)
- ◆Π謎宮2019◆(7月31日附加謎題)
- 再談Windows訊息迴圈Windows
- 雷蛇遊戲手機Razer Phone 2:最強LCD螢幕遊戲手機遊戲
- 批處理指令碼來修復並開啟Windows 7中的Windows Defender防火牆指令碼Windows防火牆
- Windows安裝Python開發環境WindowsPython開發環境