【原创】windowsphone(windowsmobile)开发基础笔记
关于api的参考:
空间在下面的命名空间内;
项目构成:
程序导航:
frame的栈结构:
属性和方法:
项目运行:
即时窗口中:
页面跳转:
this.frame.navigate(typeof(页面名));
判断能否后退和前进:
if(this.frame.cangoback)
if(this.frame.cangoforward)
页面返回:
this.frame.goback();
页面前进:
this.frame.goforward();
控件篇:
关于style:
<Grid.Resources>
</Window.Resources>
复制代码
1.3 如果在其他控件(例如Grid)的Resources中声明Style,则它的有效范围就是这个控件
复制代码
<Grid.Resources>
</Grid.Resources>
复制代码
注:
Style中如果只写了TargetType="Button",没有写x:Key,则Style有效范围内的Button的Style默认都是这个Style。
Style中如果写x:Key=“buttonStyle1”了,则引用此Style的方法为Style="{StaticResource buttonStyle1}"
- TargetType
如果没有给Style指定TargetType,则在写Style时,必须给每个属性添加类型,这样不同的类型可以共用同一个Style:
注:将Style1同时指定给Button和TextBlock,Button会自动忽略不适用它们的属性Text。而二者公有的属性Height,Width,对二者都有效。
查看:
深入WPF--Style
超链接hyperlinkbutton:
添加超链接;
textbox:
属性:
fontfamily 字体设置;
inputscope:键盘类型 枚举
acceptsreturn :是否支持enter换行 bool
header控件头: 文本说明
textwarping=warp 文本多行
关于fontweight bold 为加粗 light 为加亮 black为加黑
关于换行标签(相当于br标签):
关于run子标签
button按钮:
clickmode属性:
1,设置悬浮(hover)执行点击操作;
2,press, 压下执行
3,release 弹起执行
在c#中:
Button btn = new Button();//用新的Button覆盖之前的button
gd_main.Children.Add(btn);
Grid.SetRow(btn, i);
Grid.SetColumn(btn, j);
btn.Content = num.ToString();
btn.FontSize = 40;
btn.Background = new SolidColorBrush(Blue);
comobox下拉控件:
//不仅仅可以添加文本,其它控件亦可
在c#中添加:
关于在c#中添加控件:
出现位置及大小设置:
对齐设置:
窗体中添加控件:
容器中添加控件:
各控件有所不同:
comobox下拉控件:
//不仅仅可以添加文本,其它控件亦可
在c#中添加:
布局控件中添加:
border边框控件:
属性:
borderbrush 为边框颜色画刷
borderthickness 为边框宽度
listview控件:
添加项目:
listView1.Items.Add(textBox1.Text);
删除项目:
listView1.Items.Remove(listView1.SelectedItems[listView1.SelectedItems[0].Index]);
关于数据绑定:
c#中的绑定语法:
lv_appear.ItemsSource = list;
xaml中的形式:
显示值的设置:
xaml中
关于选中项目的内容获取:
selecteditem指选取的对象。
selecteditem指选取的值。xaml需要设置
grid:
Grid.Columdefinitons来声明一列。
Height表示该行的高度,
width表示列的宽度。
其中”*”表示该行的高度和宽度基于可用空间(去掉其它固定高度行的高度)的加权比例.
stackpanel:
属性:
orientation: 排列方式 水平horizontal,垂直?
messagedialog:
即wpf的messagebox控件
括号内的属性:
(string1,string2)
//string1 表示显示的内容,string2表示显示的标题。
弹出提示框:
注:其中的await showAsync()为异步操作(?);
需要命名空间:using Windows.UI.Popups;
slider滑动控件:
flyout浮出控件:
flyout为button的默认click事件。
如果用于其他控件,则代码如下:
xaml:
<FlyoutBase.AttachedFlyout>
</FlyoutBase.AttachedFlyout>
c#:
private void txt_enter_TextChanged(object sender, TextChangedEventArgs e)
{
FrameworkElement ele = sender as FrameworkElement;
if (txt_enter.Text == "我是鲁新")
FlyoutBase.ShowAttachedFlyout(ele);
}
4.15 浮出控件(Flyout) 浮出控件(Flyout)是一个轻型的辅助型的弹出控件,通常会作为提示或者要求用户进行相关的交互来使用。Flyout控件与Windows Phone里面的弹出框MessageDialog是有很大区别的,首先Flyout控件是一个辅助控件,需要与其他控件结合起来才能使用,还有就是取消的规则不一样,Flyout控件可以通过单击或在外部点击都可以轻松消除浮出控件。你可以使用Flyout控件收集用户输入、显示与某个项目相关的更多信息或者要求用户确认某个操作。只有当为了响应用户点击时才应显示Flyout控件,也就是说Flyout控件并不是直接就显示出来,而是必须要用户的操作才能呈现出来;当用户在弹出窗口外部点击时,Flyout控件就会消失,这也是Flyout控件默认的关闭规则。控件的XAML语法如下:
从控件的XAML语法中可以看出,Flyout控件本身就是一种辅助性的控件,它必须要与其他的控件结合起来使用才可以,那么通常会将Flyout控件附加到一个Button控件上直接相应Button控件的单击事件,因此Button控件拥有Flyout属性以简化附加和打开 Flyout 控件。单击按钮时,附加到按钮的浮出控件自动打开,这是不需要处理任何事件即可打开浮出控件。那么对于非Button控件是不是不能使用Flyout控件呢?那么答案肯定是否定的,非Button控件也一样可以使用Flyout控件,你也可以使用FlyoutBase.AttachedFlyout附加属性,将 Flyout 控件附加到任何FrameworkElement对象。因为Flyout控件是必须要相应某个用户的操作的,Button控件是默认关联到了Click事件,如果是用FlyoutBase.AttachedFlyout附加属性来添加Flyout控件的这种情况下,就必须响应FrameworkElement控件上的交互,例如 Tapped,并在你的代码中打开Flyout控件。示例代码如下所示:
XAML代码:
C#代码:
private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e){ FrameworkElement element = sender as FrameworkElement; if (element != null) { FlyoutBase.ShowAttachedFlyout(element); }}
从上文我们知道了Flyout控件的两种创建方式,一种是通过Button控件的Flyout属性添加,另外的一种就是通过FlyoutBase.AttachedFlyout附件属性给任何的FrameworkElement对象来添加。那么在Windows Phone上Flyout控件一共有6种不同的类型:Flyout、DatePickerFlyout、TimePickerFlyout、PickerFlyout、ListPickerFlyout和MenuFlyout。
(1)Flyout
Flyout类型表示用于处理自定义的浮出窗口的。Flyout控件经常会使用的事件是Closed、Opened和Opening事件,分别表示是在关闭、已打开和正在打开的三种时机触发的时间,在实际的程序开发中通常会在Closed事件处理程序中来获取用户的操作结果。同时这三种事件也是其他类型的Flyout控件的共性,所以你可以把Flyout类型的Flyout控件是最简单和最基本的Flyout控件。
(2)DatePickerFlyout和TimePickerFlyout
DatePickerFlyout类型表示是选择日期的浮出窗口;TimePickerFlyout表示是选择时间的浮出窗口。DatePickerFlyout与TimePickerFlyout类型的Flyout控件实际上是和TimePicker与DatePicker控件是非常类似的,只不过Flyout控件可以监控到TimePicker与DatePicker控件的弹出时机。
(3)PickerFlyout和ListPickerFlyout
PickerFlyout表示是选择的浮出窗口,可以在页面底下添加确认的菜单栏用于用户进行确认;ListPickerFlyout表示是列表形式展示的浮出窗口,需要通过集合数据绑定来呈现列表的选择。PickerFlyout和ListPickerFlyout类型的Flyout控件是选择类型的浮出窗口,它们与其他的Flyout控件的主要区别是提供了选中确认的时间分别是PickerFlyout对应的Confirmed事件和ListPickerFlyout对应的ItemsPicked事件,而需要注意的是ListPickerFlyout需要通过数据绑定来实现选择的列表,关于数据绑定的知识在后续的章节还会进行更加详细的介绍。
(4)MenuFlyout
MenuFlyout表示是上下文菜单的选择浮出窗口。一个MenuFlyout会包含若干个MenuFlyoutItem,每个MenuFlyoutItem表示一个选项,用户可以进行单击,同时同时通过MenuFlyoutItem的Click单击事件来处理用户的单击请求。MenuFlyout还有一个很大的特点就是当用户当其弹出的时候,会把程序页面的其他部分会往里面凹下去以强调弹出的MenuFlyout浮出层。
下面给出Flyout控件的示例:6种类型的Flyout控件的使用和Button与非Button控件对Flyout控件的集成。
代码清单4-15:Flyout控件(源代码:第4章\Examples_4_15)
1. MainPage.xaml文件主要代码
2. ------------------------------------------------------------------------------------------------------------------
3. <StackPanel>
4. <!--最基本的Flyout 控件,自定义其浮出的内容-->
5. <Button Content="Show Flyout">
6. <Button.Flyout>
7. <Flyout>
8. <StackPanel >
9. <TextBox PlaceholderText="请输入名字"/>
10. <Button HorizontalAlignment="Right" Content="确定"/>
11. </StackPanel>
12. </Flyout>
13. </Button.Flyout>
14. </Button>
15. <!--浮出上下文菜单,点击菜单后改变当前按钮上的文本内容-->
16. <Button x:Name="menuFlyoutButton" Content="Show MenuFlyout" >
17. <Button.Flyout >
18. <MenuFlyout>
19. <MenuFlyoutItem Text="Option 1" Click="MenuFlyoutItem_Click"/>
20. <MenuFlyoutItem Text="Option 2" Click="MenuFlyoutItem_Click"/>
21. <MenuFlyoutItem Text="Option 3" Click="MenuFlyoutItem_Click"/>
22. </MenuFlyout>
23. </Button.Flyout>
24. </Button>
25. <!--浮出选择日期弹窗,点击确定后会触发DatePicked事件,然后可以获取选中的日期-->
26. <Button Content="Show DatePicker" >
27. <Button.Flyout>
28. <Controls:DatePickerFlyout Title="选择日期:" DatePicked="DatePickerFlyout_DatePicked"/>
29. </Button.Flyout>
30. </Button>
31. <!--浮出选择时间弹窗,点击确定后会触发TimePicked事件,然后可以获取选中的时间--->
32. <Button Content="Show TimePicker" >
33. <Button.Flyout>
34. <Controls:TimePickerFlyout Title="选择时间:" TimePicked="TimePickerFlyout_TimePicked"/>
35. </Button.Flyout>
36. </Button>
37. <!--浮出选择弹窗,显示底下的确认取消菜单栏并且处理其确认事件Confirmed--->
38. <Button Content="Show Picker" >
39. <Button.Flyout>
40. <Controls:PickerFlyout Confirmed="PickerFlyout_Confirmed" ConfirmationButtonsVisible="True">
41. <TextBlock Text="你确定吗?????" FontSize="30" Margin="0 100 0 0"/>
42. </Controls:PickerFlyout>
43. </Button.Flyout>
44. </Button>
45. <!--浮出选择列表弹窗,绑定集合的数据,处理选中的事件ItemsPicked-->
46. <Button Content="Show ListPicker">
47. <Button.Flyout>
48. <Controls:ListPickerFlyout x:Name="listPickerFlyout" Title="选择手机品牌:" ItemsPicked="listPickerFlyout_ItemsPicked" >
49. <Controls:ListPickerFlyout.ItemTemplate>
50. <DataTemplate>
51. <TextBlock Text="{Binding}" FontSize="30"></TextBlock>
52. </DataTemplate>
53. </Controls:ListPickerFlyout.ItemTemplate>
54. </Controls:ListPickerFlyout>
55. </Button.Flyout>
56. </Button>
57. <!--使用附加属性FlyoutBase.AttachedFlyout来实现Flyout控件-->
58. <TextBlock Text="请点击我!" Tapped="TextBlock_Tapped" FontSize="20">
59. <FlyoutBase.AttachedFlyout>
60. <Flyout>
61. <TextBox Text="你好!"/>
62. </Flyout>
63. </FlyoutBase.AttachedFlyout>
64. </TextBlock>
65. </StackPanel>
MainPage.xaml.cs文件主要代码
public MainPage()
{
this.InitializeComponent();
// 绑定ListPickerFlyout的数据源
listPickerFlyout.ItemsSource = new List<string> { "诺基亚", "三星", "HTC", "苹果", "华为" };
}
// PickerFlyout的确认事件,在事件处理程序里面可以处理相关的确认逻辑
private async void PickerFlyout_Confirmed(PickerFlyout sender, PickerConfirmedEventArgs args)
{
await new MessageDialog("你点击了确定").ShowAsync();
}
// TimePickerFlyout的时间选中事件,在事件处理程序里面可以获取选中的时间
private async void TimePickerFlyout_TimePicked(TimePickerFlyout sender, TimePickedEventArgs args)
{
await new MessageDialog(args.NewTime.ToString()).ShowAsync();
}
// DatePickerFlyout的日期选中事件,在事件处理程序里面可以获取选中的日期
private async void DatePickerFlyout_DatePicked(DatePickerFlyout sender, DatePickedEventArgs args)
{
await new MessageDialog(args.NewDate.ToString()).ShowAsync();
}
// MenuFlyout的菜单选项的点击事件,点击后直接获取菜单栏的文本显示到按钮上
private void MenuFlyoutItem_Click(object sender, RoutedEventArgs e)
{
menuFlyoutButton.Content = (sender as MenuFlyoutItem).Text;
}
// 通过FlyoutBase.ShowAttachedFlyout方法来展示出Flyout控件
private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
if (element != null)
{
FlyoutBase.ShowAttachedFlyout(element);
}
}
// ListPickerFlyout的选中事件,点击列表的某一项便会触发,在事件处理程序中通常会获取选中的项目来进行相关逻辑的处理
private async void listPickerFlyout_ItemsPicked(ListPickerFlyout sender, ItemsPickedEventArgs args)
{
if (sender.SelectedItem != null)
{
await new MessageDialog("你选择的是:" + sender.SelectedItem.ToString()).ShowAsync();
}
}
datepicker日期选择控件:
属性:
date 选中的日期
事件:
datechange 改变日期
注意:
在date的属性转换为字符串类型时,会出现时分秒。解决办法为tostring方法添加格式:
dattepicker1.date.tostring(yyyy-mm-dd);
媒体控件:
注:
路径既可以是本地文件也可以是网络文件。
路径一旦赋值,文件立即播放。除非设置autoplay属性为flase。
listview控件:
菜单控件:
</Grid>
<Page.BottomAppBar>
<CommandBar Height="24">
//四个图标选项
//没有图标的附属选项
<CommandBar.SecondaryCommands>
</CommandBar.SecondaryCommands>
</Page.BottomAppBar>
canvas控件:
画板控件。
hub控件(中心应用容器):
pivot控件(透视应用容器):
与hub空间的不同:
1,pivot控件背景图不随滑动而滑动。
2,hub控件是内容显露,pivot控件是标题显露。
控件属性继承:
父控件被子控件继承,如果子控件属性单独设置了,则覆盖夫控件。
注:background不能被继承。
图形控件:
通用属性:
fill: 填充颜色
stroke: 轮廓颜色
strokethickness:轮廓宽度
线性渐变画刷:
矩形:recttangle
椭圆:ellipse
直线:line
<line x1="" y1="" x2="" y2="" stroke="" strokethickness(宽度)=“” />
strokedasharray =“x y” 的数值是 相对于strokethickness的倍数,而非实际像素数。
//x为虚线的线段长度,y为线段之间的间隔。
polyline折线:
<polyline points="0,0 500,200 300,500 400,700"
多边形polygon:
path路径:
<path data="M0,0 L200,100 H300,100 Z"
M移动 起始点 L直线 H水平线 V垂直线 Z结束
f12:
切换到代码界面。
第一行为控件的命名空间;
第二行为属性的命名空间; //x:name 意思是第二行的属性,因为第二行是属性的集合。
关于messagedialog方法的一些注意:
需要命名空间:using Windows.UI.Popups;
MessageDialog类有以下常用方法和属性:
ShowAsync():异步弹出消息框.
Commands:添加命令,在弹出框界面上同步添加相应的按钮.
DefaultCommandIndex:设置默认按钮的索引,按ENTER键将激活该索引对应的命令按钮
CancelCommandIndex:设置取消退出按钮的索引,按ESC键将激活该索引对应的命令按钮
Title:弹出消息框的标题
async:用于方法申明时,此关键字是告诉编译器在这个方法体内可能会有await关键字。
await:用于异步操作时的模拟同步等待,声明有此关键字的异步操作需等待异步操作完成之后才继续往下运行,但是不会阻塞UI线
程。
注意:使用await关键字的方法体,必须使用async声明方法
wp8.1的软件状态:
即:
-》running 运行
-》notrunning 停止
-》suspended 挂起
另外:
activated 即加载状态完成 //此为事件
activating 即正在加载状态 此时可以加载图片
suspending 正在挂起 //此为事件
resuming //此为事件
保存数据:
为确保数据安全,在挂起时保存数据。
数据保存的三种方法:
第一种方法:
注册存储:
注:在写的过程中会生成命名空间。
挂起数据存储:
把之前挂起的数据重加载:
第二种方法:
注册存储:
注:在写的过程中会生成命名空间。
挂起数据存储:
把之前挂起的数据重加载:
在基础页代码行找到loadstate和savestate事件
添加e的pagestate。注意:这里保存的控件数据只能是本基础页的。
加载数据,要先做判断。
实际就是第一种基础上进行。
第三种方法(主流):
为改变事件添加代码,注意ApplicationData需要添加命名空间。
在loaadstate中加载:
最好做null判断
关于localsettings :
关于try与catch:
try
{
}
catch(exception ex) //把异常抛出
{
}
数据绑定:
术语:
绑定对象
绑定源
路径
扩展语法形如:
数据绑定类型:
mode=类型名
onetime:绑定一次
oneway:单向绑定
twoway:双向绑定
类型设置语法:
注意:为了让前台i及时更新数据,需要使数据源类继承自接口INotifyPropertyChanged 该接口需要添加命名空间:using System.ComponentModel;
注:没有该接口,只能前台---》后台。
并实现该接口,如下:
i
并编写方法:
后面详见下列代码:
该段代码:
string birthdate;
public string number
{
get{return birthdate;}
set
{ birthdate = value;
func(number);
}
}
public event PropertyChangedEventHandler PropertyChanged; //该事件通过右击上面的借口获得。
public void func( string bingdingname)
{
if(PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(bingdingname));
}
}
绑定列表集合:
控件设计:
绑定后台集合:
网络数据请求:
生命周期按钮:
视图--》工具栏--》调试位置
后台数据更改集合:
observablecollection
注:需要添加新的命名空间。
绑定数据源(集合):
itemssource=。。。。
静态资源:
mvvm框架:
获取动态添加的控件的属性:
1,可以添加控件名。通过控件名操作;
2,数据集中可以通过索引。
应用数据与公共文件
应用数据
注:
应用数据不能跨应用访问,不能可见访问。
一般存储字符串等简单类型。
applicationdata.current.localsettings:
详见:四级快速算分器
数据的手动删除:
判断键值是否存在:
删除语法:
容器.remove(键值);
公用文件
创建公共文件:
//获取公共文件夹
knowfolder.公共文件夹类型(图片,视频,音乐) //需导入命名空间,并且在设置中勾选该类型库。
想要保存唯一名,即如果有重复即添加数字以区分。如下:
具体代码:
StorageFolder folder = KnownFolders.MusicLibrary;
StorageFile file = await folder.CreateFileAsync(txt_filename.Text.ToString() + ".txt",CreationCollisionOption.GenerateUniqueName);
await FileIO.WriteTextAsync(file,txt_filecontent.Text);
await new MessageDialog("","创建成功!!!").ShowAsync();
动态磁贴及通知;
toast(通知):
参考(微软官网):
创建步骤:
注:
1,创建前要在设置中允许显示通知。
2,加载模板(共8种,官网详细): 以第一种(toastText01)为例:
注:需要添加命名空间。
需要添加;
using Windows.UI.Notifications;
3,把加载的模板传值给定义变量:
注:需要添加命名空间。
需要添加;
using Windows.Data.Xml.Dom;
4,加载数据:
5,总的过程:
模板(单种文本):
private void toastappear_Click(object sender, RoutedEventArgs e)
{
XmlDocument xml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
XmlNodeList nodelist = xml.GetElementsByTagName("text");
nodelist[0].AppendChild(xml.CreateTextNode("来自鲁新的问候"));
ToastNotification tn = new ToastNotification(xml);
ToastNotificationManager.CreateToastNotifier().Show(tn);
}
以第二种为例:(标题加内容)(应用较为普遍):
自定义模板(使用xml代码):
注:红色代码区域模板来自于微软文档(第一种模板为例),注意要四个双引号。
效果如下:
注:
wp只能显示文本,win8可以显示图片。
磁贴设计
创建辅助磁贴:
1,首先创建应用磁贴id(类中):
2,创建此贴构造函数:
注:
1,需要添加命名空间。
2,构造函数中的图片要求150*150
3,最后一个参数是指显示的磁贴的大小
3,(选做)设置其他尺寸磁贴:
4,设置显示文本(第二步的第二个参数):
5,显示磁贴:
注:
别忘了添加async关键字。
判断磁贴是否存在并作相应操作:
在mainpage中的:
方法中添加判断。
在按钮的点击事件中对两种情况进行处理:
删除:
创建部分上面已给出:
进行磁贴更新:
注:
磁贴更新的模板也在官网,需要时查询。
下面 以更新150150磁贴(文本)为例:
该模板有一行大标题,三行文本。
300150 有5行文本。
1,
注:需要添加两个命名空间。
2,
注:创建tn与toast类似,设置更新时间,10s。信息显示10s后消失。
3,显示消息:
注:
关于磁贴翻转的使用,可以到官网上参考。
注意:
关于安装文件内的媒体数据:
访问格式:
多媒体开发
例;player.play();
注:
路径既可以是本地文件也可以是网络文件。
路径一旦赋值,文件立即播放。除非设置autoplay属性为flase。
注:
currentstateechanged 事件指的是播放器状态发生改变时触发,配合currentstate属性。
开启媒体播放进度条:
样式:
一个uri方案:
例:访问本地文件:
传输控件(响应硬件系统设置):
c#代码中的一些问题(参数 sender 与 e):
上面事件中的指的是该事件的主体控件(利用这个可以为控件命名)
指的是 传入的值。
地图服务
申请令牌:
mapcontrol控件:
地图控件铺满全屏:
方法1,去掉控件全部属性
方法2,控件上右击,布局--》全部重置
使用地图令牌:
1,找到
并查看代码
2,找到phoneidentity,把
phoneproductId改为地图令牌标识,即
3,在设置中勾选位置选项。
4,在xaml代码界面中地图控件添加属性,并把
复制到代码中。
在地图中显现当前位置:
代码:
注:
geolocator.coordinate.latitude为纬度,
geolocator.coordinate.longitude为经度
缩放属性zoomlevel(1--20):
可以通过滑动控件控制缩放值:
地址与经纬度之间的转化:
微软方式:
触摸 手势操作
参考资料:
指针:
关于滑动操作:
例子:判断方向:
复杂触摸的处理(点按,双按,长按)
righttapped(右击):指的是长按弹起触发
多点触控与复杂事件:
注:
使用此系列事件需要启用:
如下:
封装方法:
选中内容,右击,提取方法。
关于DeBug:
注:需导入命名空间
处理后退键:
publicMainPage(){this.InitializeComponent();#if WINDOWS_PHONE_APPWindows.Phone.UI.Input.HardwareButtons.BackPressed+=HardwareButtons_BackPressed;#endifthis.NavigationCacheMode=Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;}#if WINDOWS_PHONE_APPvoidHardwareButtons_BackPressed(object sender,Windows.Phone.UI.Input.BackPressedEventArgs e){if(Frame.CanGoBack){
e.Handled=true;Frame.GoBack();}}#endif
链接跳转:
Windows Phone 8.1 中可以使用这个链接跳转到应用评论页面:
await Windows.System.Launcher.LaunchUriAsync(
newUri("ms-windows-store:reviewapp?appid="+CurrentApp.AppId));
注:需添加命名空间
开发笔记:如何在应用内跳转到微软商店中查看开发者名下全部应用列表
我们可以很容易地使用微软的文件和URI协议的Windows Phone8,直接启动Windows应用程序商店,以显示在您的出版商名称的应用程序列表。一个小例子已经如下。
//function to display the application list
public async void launch()
{
//以"深圳九幽网络科技有限公司"为例:
await Windows.System.Launcher.LaunchUriAsync(new Uri("zune:search?publisher=深圳九幽网络科技有限公司"));
}
调用上述功能后,您将得到进入发行商名下APP列表,记得修改链接中的“publisher=”为您的发行商名称哦!
跳转到 应用下载页面:
//注:在账户中找到应用链接使用链接即可。
await Launcher.LaunchUriAsync(new Uri("zune:navigate?appid=dcdd7004-064a-4c04-ad22-eae725f8ffb1")); }
检测双击的方法:
以下是双击检测的方法:
longLastExitAttemptTick=DateTime.Ticks;privatevoidBackButtonPressHandler(...){long thisTick =DateTime.Ticks;if(LastExitAttemptTick- thisTick <[specified amount]){//退出代码}elseLastExitAttemptTick=DateTime.Ticks;}
邮件反馈:
wp8.1 app调用outlok邮箱反馈,wp8.1app调用outlok
开发wp8.1 app 添加邮箱反馈功能,using Windows.ApplicationModel.Email; 方法如下
privateasyncvoid SendEmailTask()
{
var emailMessage = new EmailMessage();
emailMessage.Subject = "subject";
emailMessage.Body = "body";
emailMessage.To.Add(new EmailRecipient("emailAddress"));
await EmailManager.ShowComposeNewEmailAsync(emailMessage);
}
注:配合 TextBlock中的
网络编程
http协议:
httpwebrequest:
get请求:
sqlite操作
wp8.1
注意:
修改数据应直接对数据库进行操作,而非数据列表。
修改数据库数据:
SQLiteAsyncConnection conn = connData();
ObservableCollection
//for (int i = 0; i < list.Count; i++)
//{
// if (list[i].ID == 2)
// {
// list[i].Name = "小梦我爱你,再一次";
// }
//}
var query = conn.Table
var result = await query.ToListAsync();
foreach (var item in result)
{
item.Name = "小梦我爱你";
await conn.UpdateAsync(item);
}
//ObservableCollection
lv_appear.ItemsSource = list;
闪光灯:
如何在 Windows Phone 8 的应用中使用相机闪光灯
2014/6/18
适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1
从 Windows Phone OS 7.1 开始,您可以使用 Microsoft.Devices.PhotoCamera 类以编程方式访问手机的相机。本主题介绍如何采用编程方式设置相机闪光灯模式。本主题是如何为 Windows Phone 8 创建基本相机应用的继续,并且假定您已在该主题中创建了基本相机项目。
提示:
从 Windows Phone 8 开始,应用可以将 PhotoCaptureDevice 类用于高级捕获方案。PhotoCaptureDevice 允许应用控制照片属性,例如 ISO、曝光补偿和手动对焦位置(在手机上可用时)。本主题没有演示PhotoCaptureDevice;有关使用此类的更多信息,请参见 Windows Phone 8 的高级照片拍摄。
本主题与基本相机示例相对应。
Windows Phone 支持 FlashMode 枚举中的下列闪光灯模式。
闪光灯模式
描述
Off
相机闪光灯已禁用。
On
相机闪光灯已启用。
RedEyeReduction
红眼消除已启用。
自动
相机闪光灯在自动模式下使用。
重要说明:
并非所有设备都支持所有闪光灯模式;重要的是在使用之前,调用 IsFlashModeSupported(FlashMode) 方法来确认可用的模式。
实现相机闪光灯
本节提供在您的应用中实现闪光灯模式配置所需的代码。
实现相机闪光灯的步骤
打开在如何为 Windows Phone 8 创建基本相机应用中创建的基本相机项目。
在主页 XAML 文件 MainPage.xaml 的 StackPanel 元素中添加以下代码,放在名为 ShutterButton 的 Button 元素下面。该代码为相机闪光灯的按钮。
XAML
<ButtonName="FlashButton"Content="Fl:TBD"Click="changeFlash_Clicked"FontSize="26"FontWeight="ExtraBold"Height="75"/>
打开主页的代码隐藏文件 MainPage.xaml.cs,在 MainPage 类构造函数上面添加以下变量声明:
C#
VB
// Holds current flash mode.privatestring currentFlashMode;
在 MainPage.xaml.cs 中,向 OnNavigatedTo 方法中添加以下代码,放在 Disable UI 注释下面。
C#
VB
FlashButton.IsEnabled = false;
该代码禁用闪光灯按钮。当设备上的相机不可用时使用。
在 MainPage.xaml.cs 中,向 cam_Initialized 方法中添加以下代码,放在 txtDebug 语句下面。
C#
VB
// Set flash button text.
FlashButton.Content = "Fl:" + cam.FlashMode.ToString();
该代码显示 FlashButton 按钮上的当前闪光灯模式。
在 MainPage.xaml.cs 中,向 MainPage 类添加以下代码。该代码通过每次按按钮时切换到另一种闪光灯模式来实现 changeFlash_Clicked 的事件处理程序。
C#
VB
// Activate a flash mode.// Cycle through flash mode options when the flash button is pressed.privatevoid changeFlash_Clicked(object sender, RoutedEventArgs e)
{
switch (cam.FlashMode)
{
case FlashMode.Off:
if (cam.IsFlashModeSupported(FlashMode.On))
{
// Specify that flash should be used.
cam.FlashMode = FlashMode.On;
FlashButton.Content = "Fl:On";
currentFlashMode = "Flash mode: On";
}
break;
case FlashMode.On:
if (cam.IsFlashModeSupported(FlashMode.RedEyeReduction))
{
// Specify that the red-eye reduction flash should be used.
cam.FlashMode = FlashMode.RedEyeReduction;
FlashButton.Content = "Fl:RER";
currentFlashMode = "Flash mode: RedEyeReduction";
}
elseif (cam.IsFlashModeSupported(FlashMode.Auto))
{
// If red-eye reduction is not supported, specify automatic mode.
cam.FlashMode = FlashMode.Auto;
FlashButton.Content = "Fl:Auto";
currentFlashMode = "Flash mode: Auto";
}
else
{
// If automatic is not supported, specify that no flash should be used.
cam.FlashMode = FlashMode.Off;
FlashButton.Content = "Fl:Off";
currentFlashMode = "Flash mode: Off";
}
break;
case FlashMode.RedEyeReduction:
if (cam.IsFlashModeSupported(FlashMode.Auto))
{
// Specify that the flash should be used in the automatic mode.
cam.FlashMode = FlashMode.Auto;
FlashButton.Content = "Fl:Auto";
currentFlashMode = "Flash mode: Auto";
}
else
{
// If automatic is not supported, specify that no flash should be used.
cam.FlashMode = FlashMode.Off;
FlashButton.Content = "Fl:Off";
currentFlashMode = "Flash mode: Off";
}
break;
case FlashMode.Auto:
if (cam.IsFlashModeSupported(FlashMode.Off))
{
// Specify that no flash should be used.
cam.FlashMode = FlashMode.Off;
FlashButton.Content = "Fl:Off";
currentFlashMode = "Flash mode: Off";
}
break;
}
// Display current flash mode.this.Dispatcher.BeginInvoke(delegate()
{
txtDebug.Text = currentFlashMode;
});
}
在设备上,通过选择“调试 | 启动调试”菜单命令来运行应用。