Windows Phone开发(13):如何规范用户的输入行为

原文:Windows Phone开发(13):如何规范用户的输入行为

很多时候,我们对用户的操作或输入做一定程度的限制,以避免发生不必要的异常或错误,因此,对一些特殊的类型,进行输入限制是很有必要的。

通改变屏幕键盘的显示模式可以规范和告诉用户, 这里应该输入什么。

要做到这些并不复杂,只要用到一个类就足矣—— InputScope,它有一个Names属性,包含InputScopeName列表,而InputScopeName的NameValue是一个枚举值,说到底,显示什么样的屏幕键盘就取决于该枚举值。

非常多的内容,至少每个枚举项表示什么,就没有必要一一说明,大家参考SDK文档就可以了。

上面是理论部分,是不是这么神呢,下面我们用实践来证明吧。

启动你的VS,然后新建一个Silverlight for Windows Phone应用项目。

界面很简单,随便放几个TextBox,我们只做几个典型的应用就行了,因为原理都是一样的。比如数字,日期,时间,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 是包含所有页面内容的根网格-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel 包含应用程序的名称和页标题-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="规范输入" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - 在此处放置其他内容-->
        <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="输入数字:" 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="输入URL:" 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="菜单项 1"/>
                <shell:ApplicationBarMenuItem Text="菜单项 2"/>
            </shell:ApplicationBar.MenuItems>
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>-->

</phone:PhoneApplicationPage>

当然了,这种限制并不能十分准确,所以在你应用程序中,确认的时候也应当对特定的数据类型进行多一次验证。

时间: 2024-09-20 05:47:40

Windows Phone开发(13):如何规范用户的输入行为的相关文章

【万里征程——Windows App开发】编辑文本及键盘输入

相信大家都会使用TextBox,但如果要让文本在TextBox中换行该怎么做呢?将TextWrapping属性设置为Wrap,将AcceptsReturn属性设置为True就好咯. PasswordBox很明显就是一个密码框了,和其他的控件相比其有2个特殊之处,一个是其可以用MaxLength来控制最大的长度,一个是用PasswordChanged来捕捉密码的改名.显然比如QQ密码的MaxLength就是16位了,而PasswordChanged可以用来监测比如用户设置的密码和用户名是否相同.

Windows Phone开发(45):推送通知大结局——Raw通知

原文:Windows Phone开发(45):推送通知大结局--Raw通知 为什么叫大结局呢?因为推送通知服务就只有三种,前面扯了两种,就剩下一种--Raw通知. 前面我们通过两节的动手实验,相信大家都知道了,推送通知其实并不复杂,为什么呢?你看到了的,不管是哪种方式,使用方法基本一样,如果你不愿意写代码的话,完全可以把代码Copy几下就完事了,三种推送通知的实现代码是一样的,而仅仅是发送的内容不同罢了. Raw推送通知比起前面两种更简单,因为它没有规范的格式,只要你向指定URI POST一个字

Windows Phone开发(14):数据模板

原文:Windows Phone开发(14):数据模板 数据模板,如果你仅仅听到这个名词,你一定很迷惑,什么来的?用来干什么的?不急,亲,今天,我们一起来探索一下吧. 用白话文说,数据模板就是用来规范数据的显示方式的,关于模板,估计各位不陌生的,大家应该玩过PPT吧,都做过演示文稿吧,对啊,PPT里面有很多模板的,明白了吧?不明白?那你一定填过表吧,如果报考什么考试的,你肯定会被要求填一些什么报名表之类的,或者说,找过工用吗?是啊,做简历也有简历模板.模板的用法就像做填空题,有了部分规范的内容,

不编程也开发13个无需编程的iOS开发工具

最近很多人都想自己开发iPhone软件, 但并非每个人都知道如何编写相关代码.还好,有很多工具可以帮助非开发人员创建自己的iPhone软件,甚至不需要编程和脚本知识.这些工具有的专为小公 司打造,有的专门为特定用户打造,比如为音乐家或电子书作者打造的软件.还有的工具可以让熟悉HTML等编程语言的开发者通过自己熟悉的语言编写代码,接 着把代码转化为iPhone软件,然后就可以提交至iTunes Store. 以下就是我们收集的13个工具,你无须掌握iOS的编程语言Objective-C就可以使用这

Masm for Windows集成开发环境编写汇编程序

由于最近在学习汇编,用的软件是一款叫"Masm for Windows集成开发环境",但是发现该软件的资料比较少,对于我们这样刚刚学习汇编的同学,我查找了很多资料,下面主要是介绍该工具及2个汇编的基本程序. 一.软件的使用 下面是阅读完四川大学的课件后几张介绍该软件运行的基本方法: 1.进入Masm forWindows集成实验环境 2.编写程序,该代码是该软件自带的简单入门实例11个中的第一个,后面将详细介绍该代码 3.保存汇编程序.编写完程序必须要保存后才能运行 4.运行程序 5.

Windows Phone 7开发教程(1)——Windows Phone开发工具初体验

这是为<程序员>4月期写的文章,是在<双重惊喜-- Windows Phone Developer Tools初体验>的基础上增加了一些内容, 包括WebBrowser空间.MediaPlayer空间,还有一个非常简单的XNA程序.希望对 Windows Phone开发有兴趣的朋友有一些帮助. Windows Phone开发工具在MIX 2010上火热登场了.Windows Mobile开发者们 压抑许久的热情终于爆发出来,对于Windows Phone的华丽转身,开发者们褒贬 不

Windows 8开发入门(二).Windows 8开发知识储备

在本文中将整理出一些Windows 8开发前需要了解的一些基础知识并且列为相应的几个表格以供大家参考, 其中部分来源于MSDN.部分来源于本人整理,如有误之处请指正,谢谢. 一.新建常用XAML项目类型 模板和各种语言的关系 项目类型名 项目类型 作用以及描述 适用语言 空白应用程序 创建一个最简化的空白XAML应用 以供用户使用,需要自己添加 界面.公共代码等. C#/VB/C++/Javascript   拆分应用布局程序 显示主从式列表,如新闻列 表 (分为很多个新闻类别,每个新闻类别 下

Kinect for Windows SDK开发入门(十四)进阶指引 上

前面十三篇文章介绍了Kinect SDK开发中的各个方面的最基础的知识.正如本系列博闻标题那样,这些知识只是Kinect for windows SDK开发的入门知识.本文将会介绍Kinect进阶开发需要了解一些知识(beyond the basic). 读者可能会注意到,在学习了前面十三篇文章中关于Kinect开发的方方面面,如影像数据流.景深摄像机.骨骼追踪.麦克风阵列.语音识别等这些知识后,离开发出一些我们在网上看到的那些具有良好用户体验的Kinect应用程序还是显得捉襟见肘.Kinect

Kinect for Windows SDK开发入门(八)骨骼追踪进阶 上

前7篇文件我们介绍了Kinect SDK中各种传感器的各种基本知识,我们用实验的方式演示了这些基本对象和方法的如何使用,这些都是Kinect开发最基本的知识.了解了这些基本知识后,就可以开发出一个基于Kinect的简单程序了.但是这些离开发出一个好的基于Kinect的应用程序还有一段距离.后面的文章中,将会结合Kinect SDK介绍WPF以及其它第三方工具,类库来建立一个以Kinect为驱动的有较好用户体验的程序.我们将利用之前讲到的知识来进行下面一些比较复杂的话题. Kinect传感器核心只