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