技术开发 频道

Windows phone入门开发问答三十则

  【IT168技术】随着windows phone越来越多的被开发者关注,windows phone的入门开发成了开发者最为关注的问题,除了搭建环境,调试实例程序之外,真正的动手开发对于入门级别的开发者来说也是个问题,因此IT168移动开发频道专门从各个论坛和社区为大家搜集到了一些关于入门开发的一些问题,进行了整理,希望能够给开发者带来一定的帮助。

  问题一:Windows Phone 7上好像无法使用 NavigationService.RemoveBackEntry()。

  使用场景:

  1. 从登录页面登录成功后进入主页,这时不希望用户按返回键后返回到登录页。(如何操作呢)

  2. 从一个页面导航到另一个页面。由于某种原因不想用户返回键后返回到上一个页面。(如何操作呢)

  答案:不能控制page栈。第一个问题困扰了我很久,很难想出完美的方法,后来取消了app运行时直接进入登录页面,改在主页面中增加一个“登录”选项来跳转到登录页面。

  问题二:

  1.我建了一个类。 类中有几个成员属性为字符串类型。

  2.从网络上请求到数据,并把数据放到该类的List中。

  3.程序Tombstone,把列表保存到Page.State(State可以保存任何类型)。

  4.从Page.State中读数据,读出来每个ListItem中的成员属性都为空,这是为什么?如果单独只保存一个Item,读出来的成员属性都是正确的。

  答案:把它拆装为string或者int保存,当激活时,再将string或者int组装回item

  问题三:如何变换page的Content?

  1. 现在做了两个UserControl用做Page的Content.

  2. 先在页面中加入第一个UserControl.

  3. 当第一个UserControl做完一件事后, Page自动把Content换成第二个UserControl

  答案:在UserControl1中定义一个事件或者普通的委托,在其完成网络请求后,调用这个委托。

  在Page中设置UserControl1的委托的处理逻辑,也就是设置Content即可。

  问题四:关于UserControl的问题:

  我想在一个页面中弹出一个Popup,Popup的内容是一个自己绘制的UserControl,有三个按钮。三个按钮分别要向三个页面跳转并发消息,可是系统中只有Page才有导航的功能,UserControl没有。要怎么解决这个问题?

  答案:在UserControl里开个事件 Page里面写事件内容。

  问题五:Panorama的title与PanoramaItem的header大小能改吗?

  答案:都可以修改。只需要编辑它们对应的TitleTemplate和HeaderTemplate就可以了。不过建议不要修改其高度,保证用户体验的一致性。

  问题六:我需要在一个控件上显示一个滚动的文本, 比如定时器来了让这个文本滚动一个像素。这样,我需要把这个文本先画到buffer上, 然后把buffer 从位置 X1 到 X2 刷新到屏幕上或者一个控件上,在Phone7里面该怎么做呢?

  答案:移动TextBlock也可以,这样做似乎也比较方便,我写了一个,看看效果可以不?

1.    <Canvas x:Name="canvas1" Background="Yellow">
2.        <Canvas.Clip>
3.            <RectangleGeometry Rect="50,50, 350,50" />
4.        </Canvas.Clip>
5.        <Canvas.Triggers>
6.            <EventTrigger RoutedEvent="Canvas.Loaded" >
7.                <BeginStoryboard>
8.                    <Storyboard x:Name="sttorybord1" Storyboard.TargetProperty="(Canvas.Left)" RepeatBehavior="Forever" >
9.                        <DoubleAnimation Storyboard.TargetName="textBlock1" From="50" To="-500" Duration="0:0:10"  />
10.                    </Storyboard>
11.                </BeginStoryboard>
12.            </EventTrigger>
13.        </Canvas.Triggers>
14.        <TextBlock x:Name="textBlock1"  FontSize="36" Foreground="Green" Text="abcdefghijklmnopqrstuvwxyz" Canvas.Top="50" Width="550" Height="50"/>
15.    </Canvas>

  问题七:使用MediaPlayerLauncher播放在线视频时,无法做快进和快退(视频都缓冲完成)。本地视频却可以。 难道是MediaPlayerLauncher现在功能不完善?因为MediaElement和MediaPlayerLauncher功能是一样的。 那MediaElement能不能做无法做快进和快退?

  答案:Location = MediaLocationType.Data;就行了。

  问题八:一个页面分为上, 中, 下三个部分。每一个部分里面还有布局。我能不能写三个资源分别对应上,中,下三个部分。 再把三个资源放在一个Grid里。怎么做呢?

  答案:先在那个主Gird,通常情况下默认名称为ContentPanel,先把它划分为三部分,通过RowDefinition或在其设计界面中划分。

  这三部分再分别放置楼主需要的布局控件,比如再放置Grid、StackPanel等,按照需要就随意在里面放控件了。

  问题九:textbox的keydown事件,为什么不响应退格键啊。难道要写个textbox的子类再重载onKeyDown吗?

  答案:只有连续按退格键直到TextBlock的顶部左边缘时(也就是删除掉其中的第一个字符时)才会触发一次KeyDown !

  问题十:xmal代码如下:

<TextBox Height="85" HorizontalAlignment="Left"  Name="textBox1" Text="TextBox" VerticalAlignment="Top" Width="192"  VerticalScrollBarVisibility="Visible" TextWrapping="Wrap" AcceptsReturn="True" />

  我用普通的silverlight application试了一下,一点问题没有,可是为什么phone7的工程就不行呢?写了多少行都没有滚动条出来,

  答案:最简单的办法,套个ScrollView

  <ScrollViewer Height="136" HorizontalAlignment="Left"  Name="scrollViewer1" VerticalAlignment="Top" Width="367">
3.                    <TextBox Name="textBox1"  AcceptsReturn="True" VerticalScrollBarVisibility="Visible" TextWrapping="Wrap"  />
4.                </ScrollViewer>
5.            </Grid>
0
相关文章