Windows Phone開發(13):如何規範用戶的輸入行爲


很多時候,我們對用戶的操作或輸入做一定程度的限制,以避免發生不必要的異常或錯誤,因此,對一些特殊的類型,進行輸入限制是很有必要的。

通改變屏幕鍵盤的顯示模式可以規範和告訴用戶, 這裏應該輸入什麼。

要做到這些並不複雜,只要用到一個類就足矣—— InputScope,它有一個Names屬性,包含InputScopeName列表,而InputScopeName的NameValue是一個枚舉值,說到底,顯示什麼樣的屏幕鍵盤就取決於該枚舉值。

非常多的內容,至少每個枚舉項表示什麼,就沒有必要一一說明,大家參考SDK文檔就可以了。

上面是理論部分,是不是這麼神呢,下面我們用實踐來證明吧。

啓動你的VS,然後新建一個Silverlight for Windows Phone應用項目。

界面很簡單,隨便放幾個TextBox,我們只做幾個典型的應用就行了,因爲原理都是一樣的。比如數字,日期,時間,Email地址等。

  1. <phone:PhoneApplicationPage   
  2.     x:Class="InputScpSample.MainPage"  
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  5.     xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"  
  6.     xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"  
  7.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  8.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  9.     mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"  
  10.     FontFamily="{StaticResource PhoneFontFamilyNormal}"  
  11.     FontSize="{StaticResource PhoneFontSizeNormal}"  
  12.     Foreground="{StaticResource PhoneForegroundBrush}"  
  13.     SupportedOrientations="Portrait" Orientation="Portrait"  
  14.     shell:SystemTray.IsVisible="True" xmlns:my="clr-namespace:System;assembly=mscorlib">  
  15.     <phone:PhoneApplicationPage.Resources>  
  16.         <my:Double x:Key="fontSize">32</my:Double>  
  17.     </phone:PhoneApplicationPage.Resources>  
  18.     <!--LayoutRoot 是包含所有頁面內容的根網格-->  
  19.     <Grid x:Name="LayoutRoot" Background="Transparent">  
  20.         <Grid.RowDefinitions>  
  21.             <RowDefinition Height="Auto"/>  
  22.             <RowDefinition Height="*"/>  
  23.         </Grid.RowDefinitions>  
  24.   
  25.         <!--TitlePanel 包含應用程序的名稱和頁標題-->  
  26.         <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">  
  27.             <TextBlock x:Name="ApplicationTitle" Text="我的應用程序" Style="{StaticResource PhoneTextNormalStyle}"/>  
  28.             <TextBlock x:Name="PageTitle" Text="規範輸入" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>  
  29.         </StackPanel>  
  30.   
  31.         <!--ContentPanel - 在此處放置其他內容-->  
  32.         <ScrollViewer x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"  
  33.                       HorizontalScrollBarVisibility="Auto"  
  34.                       VerticalScrollBarVisibility="Auto">  
  35.             <StackPanel>  
  36.                 <TextBlock Text="輸入Email地址:" FontSize="{StaticResource fontSize}" />  
  37.                 <TextBox Name="txtEmail" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  38.                     <TextBox.InputScope>  
  39.                         <InputScope>  
  40.                             <InputScope.Names>  
  41.                                 <InputScopeName NameValue="EmailNameOrAddress"/>  
  42.                             </InputScope.Names>  
  43.                         </InputScope>  
  44.                     </TextBox.InputScope>  
  45.                 </TextBox>  
  46.   
  47.                 <TextBlock Text="輸入數字:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" />  
  48.                 <TextBox Name="txtNumber" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  49.                     <TextBox.InputScope>  
  50.                         <InputScope>  
  51.                             <InputScope.Names>  
  52.                                 <InputScopeName NameValue="Number"/>  
  53.                             </InputScope.Names>  
  54.                         </InputScope>  
  55.                     </TextBox.InputScope>  
  56.                 </TextBox>  
  57.   
  58.                 <TextBlock Text="輸入時間:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" />  
  59.                 <TextBox Name="txtTime" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  60.                     <TextBox.InputScope>  
  61.                         <InputScope>  
  62.                             <InputScope.Names>  
  63.                                 <InputScopeName NameValue="Time"/>  
  64.                             </InputScope.Names>  
  65.                         </InputScope>  
  66.                     </TextBox.InputScope>  
  67.                 </TextBox>  
  68.   
  69.                 <TextBlock Text="輸入人民幣:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" />  
  70.                 <TextBox Name="txtRMB" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  71.                     <TextBox.InputScope>  
  72.                         <InputScope>  
  73.                             <InputScope.Names>  
  74.                                 <InputScopeName NameValue="CurrencyChinese"/>  
  75.                             </InputScope.Names>  
  76.                         </InputScope>  
  77.                     </TextBox.InputScope>  
  78.                 </TextBox>  
  79.   
  80.                 <TextBlock Text="輸入電話號碼:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" />  
  81.                 <TextBox Name="txtPhoneNum" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  82.                     <TextBox.InputScope>  
  83.                         <InputScope>  
  84.                             <InputScope.Names>  
  85.                                 <InputScopeName NameValue="TelephoneNumber"/>  
  86.                             </InputScope.Names>  
  87.                         </InputScope>  
  88.                     </TextBox.InputScope>  
  89.                 </TextBox>  
  90.   
  91.                 <TextBlock Text="輸入URL:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" />  
  92.                 <TextBox Name="txtURL" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  93.                     <TextBox.InputScope>  
  94.                         <InputScope>  
  95.                             <InputScope.Names>  
  96.                                 <InputScopeName NameValue="Url"/>  
  97.                             </InputScope.Names>  
  98.                         </InputScope>  
  99.                     </TextBox.InputScope>  
  100.                 </TextBox>  
  101.   
  102.                 <TextBlock Text="輸入單個字符:" Margin="0,15,0,0" FontSize="{StaticResource fontSize}" />  
  103.                 <TextBox Name="txtChat" FontSize="{StaticResource fontSize}" HorizontalAlignment="Stretch">  
  104.                     <TextBox.InputScope>  
  105.                         <InputScope>  
  106.                             <InputScope.Names>  
  107.                                 <InputScopeName NameValue="Chat"/>  
  108.                             </InputScope.Names>  
  109.                         </InputScope>  
  110.                     </TextBox.InputScope>  
  111.                 </TextBox>  
  112.   
  113.             </StackPanel>  
  114.         </ScrollViewer>  
  115.     </Grid>  
  116.    
  117.     <!--演示 ApplicationBar 用法的示例代碼-->  
  118.     <!--<phone:PhoneApplicationPage.ApplicationBar>  
  119.         <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True">  
  120.             <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="按鈕 1"/>  
  121.             <shell:ApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="按鈕 2"/>  
  122.             <shell:ApplicationBar.MenuItems>  
  123.                 <shell:ApplicationBarMenuItem Text="菜單項 1"/>  
  124.                 <shell:ApplicationBarMenuItem Text="菜單項 2"/>  
  125.             </shell:ApplicationBar.MenuItems>  
  126.         </shell:ApplicationBar>  
  127.     </phone:PhoneApplicationPage.ApplicationBar>-->  
  128.   
  129. </phone:PhoneApplicationPage>  


當然了,這種限制並不能十分準確,所以在你應用程序中,確認的時候也應當對特定的數據類型進行多一次驗證。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章