SupportedOrientations 和 Orientation
SupportedOrientations比较有用,而Orientation只能影响到设计时的状态,无法影响运行时的状态,因此可以不管Orientation。
Landscape分为Left和Right两种
竖直着看的话,Landscape Left是屏幕在键盘左边,Landscape Right是屏幕在键盘右边。
一旦支持了Landscape,就必须同时支持左右两种。
获得分辨率
Application.Current.Host.Content.ActualWidth
Application.Current.Host.Content.ActualHeight
屏幕键盘
On-Screen Keyboard,也叫software input panel(SIP),竖着高339像素,横着搞259像素。
Input Scope:调出不同的键盘
目前有62种input scope但只有11种不同的键盘,也就是说,其中很多是不同名字的input scope对应着同一种键盘,例如numbers和digits。
更多内容参考P66
Input Scope只能用来粗略限制一下输入(而且是在没有物理键盘的情况下),精确的控制还是要通过编程。
例如要控制TextBox的输入只能是数字:
多行的TextBox
一般做下面三步:
- 把AcceptsReturn属性设置为true(默认是false)
- 把TextWrapping属性设置为Wrap(默认是NoWrap)
- 把MinHeight设置得高一点,让人一看就是多行的。
TextWrapping指的是一行的文字超出textbox宽度的时候,是否自动折行。若一个TextBox只设置了TextWrapping=Wrap,AcceptsReturn=false,则它也是多行的,只不过里面无法用回车换行。
英文大小写规范
全大写:application title
全小写:
1 各种title: page title, group title, list title, panorama and pivot headings.
2 button text
句子首字母大写:其他所有的
单词首字母大写:不要用
标点规范
不要用冒号,除非本来就该有。
不要用省略号,除非进度条的文字说明。(不像PC上预知会打开新窗口而加上…)
用逗号来表示分割。
用&不用and,用短不用长。
滚动控件 ScrollViewer
滚动条的可见性VerticalScrollBarVisibility/HorizontalScrollBarVisibility有四个枚举值,但实质上只有两个含义。
Visible=Auto=启用
Disabled=Hidden=禁止
VerticalScrollBarVisibility的默认值是启用。
HorizontalScrollBarVisibility的默认值是禁止。
宽高大小
应该通过MinHeight和MaxHeight等,给出一个范围,而不是指定具体值(给Height赋值)。
Auto意味着它的值是double.NaN,即根据内容来决定大小。当没有给Height,Width显示赋值的时候,值都是double.NaN。
若要判断长度宽度值是否是Auto,只需要用double类的静态方法IsNaN判断。
若要获得长度宽度值到底是多少,用ActualHeight,ActualWidth,这两个都是只读的。
Margin和Padding
Margin和Padding都是Thickness类型的值,该类型的值可以由1个、2个、或4个参数来决定。
4个参数的顺序是:左、上、右、下
2个参数的顺序是:左右、上下 例如1,2表示成四个参数是1,2,1,2
Margin指的是与父元素的间隔,较常用。允许负值。
Padding指的是与子元素的间隔,不常用。不允许负值。TextBox的Padding默认值是2,一般不建议修改Padding的默认值,因为这些默认值是微软反复尝试过之后预设好的。
打电话
PhoneCallTask是用来打电话的,但在模拟器上实例化PhoneCallTask会抛异常退出,因此可以通过Microsoft.Devices.Environment.DeviceType这个属性来判断运行环境。
打电话的代码如下:
void TapHereToCall_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (Microsoft.Devices.Environment.DeviceType == Microsoft.Devices.DeviceType.Emulator) { return; } PhoneCallTask phoneLauncher = new PhoneCallTask(); phoneLauncher.DisplayName = this.ContactNameTextBox.Text; phoneLauncher.PhoneNumber = this.PhoneNumberTextBox.Text; phoneLauncher.Show(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架