博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
InputControls的应用
阅读量:4322 次
发布时间:2019-06-06

本文共 7243 字,大约阅读时间需要 24 分钟。

在Windows Phone 7中,存在两个输入型控件:TextBox和PasswordBox,后者在本质上其实是将TextBox的变形,在创建的项目中插入新的一页,名为“InputControls.xaml”,将页面名称更改为“输入控件”,之后在xaml代码区域手动书写代码来添加控件(当然也可以拖控件),添加一个TextBox和一个PasswordBox。

在上面的代码中,一个标签如果没有下级子标签,就使用“/>”结尾,如果有下级子标签就使用“<TextBox></TextBox>”这样的格式,其中一个Margin属性表示外边距,它的使用格式是:<frameworkElement Margin="uniform"/>或<frameworkElement Margin="left+right,top+bottom"/>或<frameworkElement Margin="left,top,right,bottom"/>,意思就是距离边框的距离,而Name属性方便我们在后台代码中使用这个控件,就像ASP.NET中的id属性一样,唯一标识一个控件,还有就是属性的设置或者事件的添加可以手动写代码,就像上面的方式,也可以在界面中选择这个控件,右键“属性”,在设计器中更改。对于Windows Phone 7的设计,可以再属性搜索框中输入属性名自动定义到属性位置,并且还具备模糊搜索,这是比较方便的一个使用,如下:

PasswordBox控件的一个重要属性就是PasswordChar属性,用来设置要替换为的密码字符,PasswordChar="#"设置为显示字符为“#”。

TextBox控件的目的就是让用户输入信息,并且可以编辑,那么它有一个很重要的属性就是InputScope,Windows Phone 7有很多不同的输入范围,比如英文键盘。数字键盘等等,要想更改这个属性,可以直接修改InputScope属性,如:

InputScope="TelephoneNumber"

也可以在<TextBox>标签下使用<TextBox.InputScope>子标签,那么就必须将<TextBox>完整为<TextBox></TextBox>,之后设置<InputScope>的<InputScopeName>的值,如:

将其更改为电话号码的形式,另外有一个办法可以获取这个InputScope的列表,在命名空间(这个命名空间包含通过检查托管代码中程序集、模块、成员、参数和其他实体的元数据来检索其相关信息的类型。 这些类型还可用于操作加载类型的实例,例如挂钩事件或调用方法。)中,一个名为的类,这个类发现字段特性并提供对字段元数据的访问权,方法为:

FieldInfo[] array = typeof(InputScopeNameValue).GetFields(BindingFlags.Public|BindingFlags.Static);

我们可以试着通过一个按钮点击事件来更改TextBox的InputScope的值,在学习Button之前就从工具箱中托一个Button控件,添加一个Click事件,来更改TextBox的InputScope,为了不涉及到其它为学到的知识,就使用Random来产生一个介于0到array.Length之间的随机数,随机设置InputScope的值,但是代码怎么实现呢?这一个下午都没搞出个名堂,还是去提问吧。有了结果会在这里补充的。

终于经过各种折腾,找到了解决方法,将取得的array[i]值的Name属性就可以拿到输入范围的名称,但是必须转换为InputScopeNameValue枚举类型,方法是这样的:

(InputScopeNameValue)Enum.Parse(typeof(InputScopeNameValue), array[i].Name.ToString(), false);//false表示区分大小写

另外,在写程序的时候千万不要把库中的类型名称拿来用作自己的类名,虽然这些都明白,但有些时候就犯错了,就像InputScope是在System.Windows.Input命名空间下的,如果你在项目中无意间创建了一个InputScope的类,那在接下来的代码中绞尽脑汁都不会知道错在哪里,就算是花费再长时间都找不出问题所在,这也算是一点小小的经验吧。忘了截图:

.xaml代码:

.cs代码

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Reflection; namespace Controls {
public partial class InputControls : PhoneApplicationPage {
private FieldInfo[] array; public InputControls() {
InitializeComponent(); array= typeof(InputScopeNameValue).GetFields(BindingFlags.Public | BindingFlags.Static); } private void button1_Click(object sender, RoutedEventArgs e) {
Random myRandom = new Random(); int i = myRandom.Next(0, array.Length); System.Windows.Input.InputScope myInputScope = new System.Windows.Input.InputScope(); InputScopeName myInputScopeName = new InputScopeName(); myInputScopeName.NameValue = (InputScopeNameValue)Enum.Parse(typeof(InputScopeNameValue), array[i].Name.ToString(), false); myInputScope.Names.Add(myInputScopeName); this.myTextBox.InputScope = myInputScope;
}
} }

最后,想着是不是自己可以做一个简易的计算器,普通的四则运算,我是这样想的,给出两个文本框,在这里书写自己的数值,如果格式正确,自动给出答案,如果格式不正确,提示“请完成计算式”,这就要用到TextBox的TextChanged事件了,至于运算符的选择,可以用TextBlock给出,当选择后就改变它的显示的大小,给出一个tap事件。那么先来创建一个名为“四则运算”的项目,书写如下的代码:

.xaml

.cs代码

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; namespace 四则运算 {
public partial class MainPage : PhoneApplicationPage {
private string flag = "test"; private double a ; private double b ; private double result; private string resultStr; // 构造函数 public MainPage() {
InitializeComponent(); } private void myTextBox_TextChanged(object sender, TextChangedEventArgs e) {
//如果两个操作数一者为空则表示出错 if (this.myTextBox1.Text != "" && this.myTextBox2.Text != "") {
//转换为double if (!(double.TryParse(this.myTextBox1.Text, out a) && double.TryParse(this.myTextBox2.Text, out b))) {
//转换失败 this.myTextBlock.Text = "请输入正确的操作数"; return; } else {
//开始计算 Calculate(); } } } private void text_Tap(object sender, GestureEventArgs e) {
//获取所点击的TextBlock的Text的值 TextBlock textBlock = (TextBlock)sender; flag = textBlock.Text; ChangeFontSize(); } //改变字体大小,以显示用户选择的操作符 private void ChangeFontSize() {
Canvas canvas = myCanvas;//获取画布 var collection=myCanvas.Children; foreach(var item in collection) {
if(item.GetType()==typeof(TextBlock)) {
TextBlock test=(TextBlock)item; if (test.Text == flag) {
//设置字体为72 ((TextBlock)(myCanvas.FindName(test.Name))).FontSize = 72; //进行计算 Calculate(); } else { //设置字体为56 ((TextBlock)(myCanvas.FindName(test.Name))).FontSize = 56; } } } } //计算 private void Calculate() {
switch (flag) {
case "+": result = a + b; resultStr = result.ToString(); break; case "-": result = a - b; resultStr = result.ToString(); break; case "×": result = a * b; resultStr = result.ToString(); break; case "÷": if (b != 0) {
result = a / b; resultStr = result.ToString(); } else {
resultStr = "除数不能为0"; } break; case "test": resultStr = "请选择操作符"; break; } this.myTextBlock.Text = resultStr.ToString(); } } }

截图:

在写后台代码的时候,要考虑到用户首先点操作符还是首先输入数字,每一种可能都要做出相应的处理。

这篇博客就写完了,这是第一次在首页上发,这些只是自己的学习过程,小生已经做好了挨拍的准备。以后会努力的。

转载于:https://www.cnblogs.com/waitingsky/archive/2012/04/02/wp7InputControls.html

你可能感兴趣的文章
poj2253 最短路 floyd Frogger
查看>>
springboot:session集中存储到redis
查看>>
《Python编程快速上手+让繁琐工作自动化》第12章实践项目:空行插入程序
查看>>
POJ 2986 A Triangle and a Circle(三角形和圆形求交)
查看>>
css3最新技术教程
查看>>
【tool】测试驱动开发全攻略
查看>>
VIM命令图---可定制版
查看>>
《坐热板凳》第八次团队作业:Alpha冲刺(第三天)
查看>>
关于wxWidgets
查看>>
codevs 1160 蛇形矩阵
查看>>
在outlook中查找Skype的聊天记录
查看>>
netsh命令
查看>>
nginx set变量后lua无法改值
查看>>
baseAdapter
查看>>
别让你妈知道!
查看>>
JAVA设计模式之迭代子模式
查看>>
Java程序生成exe可执行文件
查看>>
什么是blob,mysql blob大小配置介绍
查看>>
模运算的规则
查看>>
CSS样式布局入门介绍,非常详尽
查看>>