Name="CheeseButton"Content="Cheese"Click="Button_Click"Width="200"Height="75"/>
C#
privatevoidButton_Click(objectsender,RoutedEventArgse)
{
ButtonclickedButton=senderasButton;
switch(clickedButton.Name)
{
case"PastaButton":
NavigationService.Navigate(newUri("/Pasta.xaml",UriKind.Relative));
break;
case"SauceButton":
NavigationService.Navigate(newUri("/Sauce.xaml",UriKind.Relative));
break;
case"CheeseButton":
NavigationService.Navigate(newUri("/Cheese.xaml",UriKind.Relative));
break;
}
}
正如你看到的,仅仅使用了NavigationService就将用户的动作记录了下来,同时使用返回键就可以使他沿着决策树返回。
下载示例代码:
明天,我们探索如何利用返回按键来实现更多的功能。
WindowsPhone7开发31日谈——第3日:
返回键
分类:
WindowsPhone7WindowsPhone7开发31日谈2010-11-0200:
291976人阅读评论(3)收藏举报
ByJeffBlankenburg
本文是“WindowsPhone7开发31日谈”系列的第3日。
昨天,我们讨论了页面导航,以及如何简单的调用NavigationService从而到达程序中的不同页面。
简要地提到了返回键,但返回键的复杂性是值得在本系列中单独成文的,主要是因为你可以重写(override)返回键的行为。
返回键如何工作
和浏览器中的返回按钮很相似。
你可以点击它通过会话的决策信息后退。
它能让你跨越多个站点,还有这些站点中的每个页面。
WindowsPhone中的返回键工作方式与之相同。
它能让你回到之前访问过的页面,甚至是跨应用程序!
例如,如果我:
1.打开人物中心(PeopleHub)。
2.在联系人列表中选择“JeffBlankenburg”。
3.点击他的家庭地址(使我们进入地图应用程序)。
4.点击开始按钮。
5.开始游戏。
当点击返回键时,会沿着发生的事件列表后退。
重写返回键行为
是的,你没看错!
你可以如你所想重定义返回键的行为。
但这不表明允许你通过这种能力做一些不负责任的行为。
在任何你想重写返回键行为的时候,你应该确认你所认为的“返回”的意思和你的用户所想的是一样。
例如,你打开了一个弹出框,用户的肌肉记忆可能会使他们按下返回键来关闭弹出框。
在这种情况下,他们的本意不是离开应用程序,“返回”仅仅意味着摆脱弹出的对话框。
另一个例子,如果你有个游戏依赖于计时器或实时动作,使用返回键来暂停游戏就比较合适而非让人立即离开。
下面是一些此类事件的指导原则:
1.你应该设身处地为用户考虑那一时刻“返回”对他们意味着什么。
2.如果再次用户按下返回键,你应该让默认行为执行。
3.使用返回键暂停游戏是个非常好的想法,但再按一次意味着他们真的想返回到前面,那就得让他们能后退。
这是在WindowsPhone中重写返回键的代码:
protectedoverridevoidOnBackKeyPress(System.ComponentModel.CancelEventArgse)
{
//你自己的代码。
认真负责些。
e.Cancel=true;//取消默认行为。
}
明天我们讨论设备的方向以及如何在程序中处理横纵方向问题。
WindowsPhone7开发31日谈——第4日:
设备方向
分类:
WindowsPhone7WindowsPhone7开发31日谈2010-11-0216:
201721人阅读评论
(1)收藏举报
ByJeffBlankenburg
本文是“WindowsPhone7开发31日谈”系列的第4日。
昨天我们讨论了WindowsPhone的一个专用硬件按钮——返回键.今天我们聚焦另一个硬件特性:
设备方向。
纵向和横向
这两个术语区别并不太明显,纵向是设备的垂直方向,横向是水平方向。
这两种方向在WindowsPhone7中都支持,但默认情况下,Silverlight程序以纵向开始,XNA程序以横向开始(游戏通常在宽屏下表现会更好)。
本篇文章中,我们只讨论Silverlight程序,以及方向改变后如何去做,因为在用户使用程序时方向的变化是不可避免的。
默认项目是“只支持纵向的”
如果你看一下MainPage.xaml文件的头部信息,会发现两个属性:
SupportedOrientations="Portrait"Orientation="Portrait"
可以将SupportedOrientations想象成你准备在程序中支持的可能发生的情况的列表。
你可以将SupportedOrientations设置成以下3个值中的任意一个:
∙Portrait(默认值)
∙Landscape
∙PortraitOrLandscape
Orientation属性是想让你的程序在启动时以何种方式呈现。
它有更多的值可选,但记住如果想要以横向模式启动,你需要将横向包含到SupportedOrientations中。
下面是Orientation值的列表:
∙Landscape
∙LandscapeLeft(将电话向左翻转)
∙LandscapeRight(将电话向右翻转)
∙Portrait
∙PortraitDown(正常的竖直方向)
∙PortraitUp(倒置)
你可以看到在上表中不仅可以指定纵向或横向,还可以指定这些方向的排列方式。
这允许你用你喜欢的方向开始你的应用程序。
改变方向
有两种方式可以改变设备的方向。
第一将SupportedOrientation设置为“PortraitOrLandscape”让操作系统为你实现。
在大多数情况下,并不推荐这样做,因为你的应用程序界面可能不再适应屏幕了。
第二种方式是通过代码实现。
我们来看一个例子。
这个简单的界面占据了整个竖直方向的屏幕。
你可以看到在横向时,很多按钮不在屏幕之中。
这不是理想的用户体验。
简单解决方法是去掉标题。
我确信我们的用户可以看出这是一个计算器。
我们可以对按钮进行重新布局,如果对于程序来说有意义,那就去做!
本篇文章的目的是告诉你如何改变你的程序,而不是告诉你应该改变什么。
我用了以下的代码来使标题栏消失和重现(这是MainPage.xaml.cs文件的全部内容):
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Net;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Animation;
usingSystem.Windows.Shapes;
usingMicrosoft.Phone.Controls;
namespaceDay4_DeviceOrientation
{
publicpartialclassMainPage:
PhoneApplicationPage
{
//Constructor
publicMainPage()
{
InitializeComponent();
this.OrientationChanged+=newEventHandler(MainPage_OrientationChanged);
}
voidMainPage_OrientationChanged(objectsender,OrientationChangedEventArgse)
{
if((e.Orientation==PageOrientation.LandscapeRight)||(e.Orientation==PageOrientation.LandscapeLeft))
{
TitlePanel.Visibility=Visibility.Collapsed;
}
elseif((e.Orientation==PageOrientation.PortraitDown)||(e.Orientation==PageOrientation.PortraitUp))
{
TitlePanel.Visibility=Visibility.Visible;
}
}
}
}
因为我只关注程序是横向还是纵向(而不是所有的方向),所以同时检测这两个状态并相应地调整界面。
你可以将每种情况分开处理使界面看起来不同。
注意我为OrientationChanged事件创建的处理程序。
这是一个在方向改变时最简单的识别方法,通常你可以使用将在第11天介绍的加速计。
看一下使用新代码后最终的例子:
下载示例代码
这不是一个可以使用的计算器,但作为一个初学者项目你可以试试。
欢迎下载这个项目,并添加缺失的功能。
WindowsPhone7开发31日谈——第5日:
系统主题
分类:
WindowsPhone7开发31日谈WindowsPhone72010-11-0221:
311781人阅读评论
(1)收藏举报
ByJeffBlankenburg
本文是“WindowsPhone7开发31日谈”系列的第5日。
昨天,我讲解了设备方向,以及在用户改变他们的设备方向时如何适应这些改变。
今天,我们来看看在他们更改了电话的主题和颜色后我们该做些什么。
深色与浅色主题
如果你还没看到,可以将你电话的主题由深改为浅,并设置一个强调色。
来看一下相同的应用程序使用了两个不同主题:
强调色
你的用户可以设置一个系统级的强调色。
操作系统提供了10种大方明快的颜色供选择。
这些颜色不仅会在电话的起始屏幕中得到充分利用,还可以供你的应用程序来使用。
来看一下这些颜色:
考虑默认值
当创建应用程序时,经常会去改变某些东西的颜色。
我很支持这种做法。
这随你。
不过你改的越多,你就越想将所有内容都改掉。
我不建议你在白色背景下使用深色文字(或者相反)。
我是说如果你想有意让某些东西变为白色,你要仔细考虑如果电话的主题变为白色时它将会变为什么样子(可能会看不到哦)。
幸好,有一种简单的方法可以处理它,叫做ExpressionBlend4。
ExpressionBlend4中的设备标签
首先,在ExpressionBlend中打开项目。
最简单的方法是在VisualStudio中右击此项目,选择“OpenInExpressionBlend…”
打开后,在Blend的UI中有一个标签叫“Device”,看起来像这样:
这个标签允许你预览右侧设计层中不同的主题和强调色。
这我们开始在程序中使用这些颜色时非常重要。
例如,我想在我的程序中使用一个带颜色的背景,颜色让用户指定。
为了做到这一点,我用了ExpressionBlend4的另一个出色的特性:
颜色资源标签。
颜色资源
在你对这批文章写“为什么我非得用ExpressionBlend的呢?
我是开发人员!
”这样的评论之前让我告诉你:
所有的这一切都可以用VisualStudio2010完成。
但那非常非常困难。
在采用复杂方法并不会带来更多裨益时我更倾向于用简单方法实现。
在你没有覆盖它们时WindowsPhone7会使用一套默认颜色集,在很多情况下,认识这些颜色对你很有益。
在下面的图片中,可以看到PhoneAccentColor和PhoneBackgroundColor根据我在设备标签中选择的主题和强调色进行改变。
第一个是深/蓝,第二个是浅/橙。
在程序中选择这些颜色后,它允许我们绑定到特定的系统值,当用户改变主意时,程序可以迅速的反映出改变。
在下面的代码中,你会看到我在程序中添加了一个使用了渐进色的矩形,从PhoneBackgroundColor过渡到PhoneAccentColor。
我还设置了应用程序的标题,同样利用了电话的强调色。
Name="LayoutRoot"Background="Transparent">
--TitlePanelcontainsthenameoftheapplicationandpagetitle-->
--TitlePanelcontainsthenameoftheapplicationandpagetitle-->
Name="TitlePanel"Grid.Row="0"Margin="12,17,0,28">
Name="Application