很多時候,我們對使用者的操作或輸入做一定程度的限制,以避免發生不必要的異常或錯誤,因此,對一些特殊的類型,進行輸入限制是很有必要的。
通改變螢幕小鍵盤的顯示模式可以規範和告訴使用者, 這裡應該輸入什麼。
要做到這些並不複雜,只要用到一個類就足矣—— InputScope,它有一個Names屬性,包含InputScopeName列表,而InputScopeName的NameValue是一個枚舉值,說到底,顯示什麼樣的螢幕小鍵盤就取決於該枚舉值。
非常多的內容,至少每個枚舉項表示什麼,就沒有必要一一說明,大家參考SDK文檔就可以了。
上面是理論部分,是不是這麼神呢,下面我們用實踐來證明吧。
啟動你的VS,然後建立一個Silverlight for Windows Phone應用項目。
介面很簡單,隨便放幾個TextBox,我們只做幾個典型的應用就行了,因為原理都是一樣的。比如數字,日期,時間,Email地址等。
<phone:PhoneApplicationPage<br /> x:Class="InputScpSample.MainPage"<br /> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"<br /> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"<br /> xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"<br /> xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"<br /> xmlns:d="http://schemas.microsoft.com/expression/blend/2008"<br /> xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"<br /> mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"<br /> FontFamily="{StaticResource PhoneFontFamilyNormal}"<br /> FontSize="{StaticResource PhoneFontSizeNormal}"<br /> Foreground="{StaticResource PhoneForegroundBrush}"<br /> SupportedOrientations="Portrait" Orientation="Portrait"<br /> shell:SystemTray.IsVisible="True" xmlns:my="clr-namespace:System;assembly=mscorlib"><br /> <phone:PhoneApplicationPage.Resources><br /> <my:Double x:Key="fontSize">32</my:Double><br /> </phone:PhoneApplicationPage.Resources><br /> <!--LayoutRoot 是包含所有頁面內容的根網格--><br /> <Grid x:Name="LayoutRoot" Background="Transparent"><br /> <Grid.RowDefinitions><br /> <RowDefinition Height="Auto"/><br /> <RowDefinition Height="*"/><br /> </Grid.RowDefinitions></p><p> <!--TitlePanel 包含應用程式的名稱和網頁標題--><br /> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"><br /> <TextBlock x:Name="ApplicationTitle" Text="我的應用程式" Style="{StaticResource PhoneTextNormalStyle}"/><br /> <TextBlock x:Name="PageTitle" Text="規範輸入" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/><br /> </StackPanel></p><p> <!--ContentPanel - 在此處放置其他內容--><br /> <ScrollViewer x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"<br /> HorizontalScrollBarVisibility="Auto"<br /> VerticalScrollBarVisibility="Auto"><br /> <StackPanel><br /> <TextBlock Text="輸入Email地址:" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtEmail" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="EmailNameOrAddress"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> <TextBlock Text="輸入數字:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtNumber" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="Number"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> <TextBlock Text="輸入時間:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtTime" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="Time"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> <TextBlock Text="輸入人民幣:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtRMB" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="CurrencyChinese"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> <TextBlock Text="輸入電話號碼:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtPhoneNum" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="TelephoneNumber"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> <TextBlock Text="輸入URL:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtURL" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="Url"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> <TextBlock Text="輸入單個字元:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" /><br /> <TextBox Name="txtChat" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch"><br /> <TextBox.InputScope><br /> <InputScope><br /> <InputScope.Names><br /> <InputScopeName NameValue="Chat"/><br /> </InputScope.Names><br /> </InputScope><br /> </TextBox.InputScope><br /> </TextBox></p><p> </StackPanel><br /> </ScrollViewer><br /> </Grid></p><p> <!--示範 ApplicationBar 用法的範例程式碼--><br /> <!--<phone:PhoneApplicationPage.ApplicationBar><br /> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"><br /> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="按鈕 1"/><br /> <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="按鈕 2"/><br /> <shell:ApplicationBar.MenuItems><br /> <shell:ApplicationBarMenuItem Text="功能表項目 1"/><br /> <shell:ApplicationBarMenuItem Text="功能表項目 2"/><br /> </shell:ApplicationBar.MenuItems><br /> </shell:ApplicationBar><br /> </phone:PhoneApplicationPage.ApplicationBar>--></p><p></phone:PhoneApplicationPage>
當然了,這種限制並不能十分準確,所以在你應用程式中,確認的時候也應當對特定的資料類型進行多一次驗證。