zoukankan      html  css  js  c++  java
  • Windows Phone 7(WP7)开发 自订磁贴(深度链接)

      用过Wp7手机的同学应该都对内置的Office印象深刻,每一个文档的图标长按会出现一个菜单,能够“固定到开始屏幕”,固定到开始屏幕的那个图标,点击之后,会直接打开该文档内容。

      又如,“人脉”中的某个联系人,长按能固定到开始屏幕,下次能更便捷的开启与该联系人的联系。

      又如,新浪微博的某个联系人,长按也能固定到开始屏幕,下次在开始屏幕直接点击他的头像,直接打开他的微博主页。传说中的暗恋功能:你在你的手机上关注了他/她,而他/她却不知道。

      这是一个不错的功能,这就是自订磁贴——深度链接。它能够直接把用户导航到你的应用中的某一个页面,而不再是只能从你的主页面进入。

      最近忙没太多时间写文章,今天做了个很粗糙的简单程序(能省的都省了,只为说明自订磁贴的问题,图片来源Bing),见下图:

      

      

      OK,now,how to……

      1、首页使用的两个正方形的控件,是HubTile;长按出现的那个菜单,是ContextMenu;这两个都需要使用SilverlightToolkit For WP7这个控件包,直接用NuGet下载就好了。(这两个对深度磁贴来说,都不是重点,你完全可以用一个Button或者其他的来进行)

      新闻1的那个XAML代码如下:

      

    <toolkit:HubTile HorizontalAlignment="Left" Margin="21,31,0,0" VerticalAlignment="Top" d:LayoutOverrides="Width, Height" Source="Images/t1.png" Title="新闻1" Message="111111">
    <i:Interaction.Triggers>
    <i:EventTrigger EventName="Tap">
    <ec:NavigateToPageAction TargetPage="/NewsView.xaml?id=1"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>
    <toolkit:ContextMenuService.ContextMenu>
    <toolkit:ContextMenu>
    <toolkit:MenuItem Header="固定到开始菜单" Click="MenuItem_Hub_Click1" />
    </toolkit:ContextMenu>
    </toolkit:ContextMenuService.ContextMenu>
    </toolkit:HubTile>

      解释一下上面的代码,如果用户Tap了这个HubTile,直接进入新闻1的详情页面。如果长按,触发菜单。

      2、上面的MenuItem_Hub_Click1的处理程序:

      

    private void MenuItem_Hub_Click1(object sender, RoutedEventArgs e)
    {
    ViewOperate.PinToStart("新闻1", "/Images/t1.png","新闻1","1111","","/NewsView.xaml?id=1");
    }

      3、ViewOperate类(名字可以自己取):

      

    using System;
    using System.Linq;
    using Microsoft.Phone.Shell;

    namespace PinToStart
    {
    public class ViewOperate
    {
    public static void PinToStart(string title, string image, string backTitle, string backContent, string backImage, string url)
    {
    //如果存在则删除,并在下面重新Pin到桌面
    ShellTile oldTile = ShellTile.ActiveTiles.FirstOrDefault
    (e => e.NavigationUri.ToString().Contains(url));
    if (oldTile != null)
    {
    oldTile.Delete();
    }

    //生成Tile
    StandardTileData myTile = new StandardTileData
    {
    BackgroundImage = new Uri(image, UriKind.Relative),
    Title = title,
    Count = 0,
    BackTitle = backTitle,
    BackContent = backContent,
    BackBackgroundImage = new Uri(backImage, UriKind.Relative)
    };
    //固定到开始界面
    ShellTile.Create(new Uri(url, UriKind.Relative), myTile);
    }
    }
    }

      很简单,完成~

      在提醒一句:上面的示例为了简单起见和时间问题,很多代码写的很不优美,建议大家自行改进。

      附源码下载: http://vdisk.weibo.com/s/2fmlH

      

    转载请注明出处~  http://www.cnblogs.com/vistach/archive/2012/02/01/Windows_Phone_WP7_Develop_Tile_StandardTileData_ShellTile_DeepLink.html 

  • 相关阅读:
    SpringMVC使用ResponseEntity实现文件下载,及图片base64的字节数组上传于下载
    File类的createNewFile()和mkdirs() mkdir()
    为什么Java里的Arrays.asList不能用add和remove方法?
    java如何向数组里添加元素
    java里getPath、 getAbsolutePath、getCanonicalPath的区别
    MultipartFile 类
    File类的createNewFile()与createTempFile()的区别
    IntelliJ Idea解决Could not autowire. No beans of 'xxxx' type found的错误提示
    FileInputStream读取的两种方法:逐字节读;以字节数组读取
    JCE cannot authenticate the provider BC
  • 原文地址:https://www.cnblogs.com/vistach/p/Windows_Phone_WP7_Develop_Tile_StandardTileData_ShellTile_DeepLink.html
Copyright © 2011-2022 走看看