设为首页 收藏本站
查看: 901|回复: 0

Windows 7 任务栏开发 之 跳转列表(Jump Lists)

[复制链接]

尚未签到

发表于 2015-5-8 10:28:15 | 显示全部楼层 |阅读模式
  本篇我们开始介绍任务栏的另一个亮点:跳转列表(Jump Lists,下文简称JL)。JL 可以使用户方便快捷的找到想要浏览的文件(文档、图片、音频或视频等)以及应用程序的链接或快捷方式。以IE 浏览器为例看看JL 都具备哪些功能:
DSC0000.png
  
  · 在红色区域“Taskbar Tasks” 放置了应用程序的一些默认任务:“打开IE 浏览器”、“从任务栏取消固定”、“关闭程序”。无论是否对JL 做过开发“Taskbar Tasks” 列表都会出现在所有的应用程序中,例如之前的实例程序(如下图)。
DSC0001.png
  · “User Tasks” 包含了应用程序本身提供的一些功能,通过这些链接可以直接对应用程序进行操作。例如,打开一个新IE 标签。
  · “Known Category” 这个列表是Windows 7 默认类别,其中包含三种模式:“Recent”(近期浏览)、“Frequent”(经常浏览)、“Neither”。下图即为Frequent 模式,它的功能是将经常浏览的网页内容记录下来以便日后再次浏览,随着时间的流逝该列表中的网页链接会随之变化或消失。除了“Known Category” 列表外同样也以创建“Custom Category”(下文将会慢慢讲到)。
  · “Pinned Category” 正如上面所讲“Frequent Category” 列表中的网页会经常变化,通过右键将网页“钉”在列表中可使其永久保存(如下图)。
DSC0002.png
  
  创建User Tasks 列表
  现在是不是也想为自己的程序添加一个JL,下面先来介绍如何创建User Tasks 列表。1. 通过JumpList 类创建一个JL 实例。2. 使用JumpListLink(string pathValue, string titleValue) 方法(pathValue:应用程序路径,titleValue:链接名称),可以将“记事本”、“画板”这样的Windows 应用程序,以及“网站地址”创建为User Tasks 链接。3. 再使用AddUserTasks(params IJumpListTask[] tasks) 方法将这些链接添加到JL 中。如下代码所示:
private JumpList jumpList;
private string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
private void addApps_Click(object sender, RoutedEventArgs e)
{
IJumpListTask notepadTask = new JumpListLink(Path.Combine(systemPath, "notepad.exe"), "Notepad")
{
IconReference = new IconReference(Path.Combine(systemPath, "notepad.exe"), 0)
};
IJumpListTask paintTask = new JumpListLink(Path.Combine(systemPath, "mspaint.exe"), "Paint")
{
IconReference = new IconReference(Path.Combine(systemPath, "mspaint.exe"), 0)
};
IJumpListTask jlSeparator = new JumpListSeparator();
IJumpListTask linkTask = new JumpListLink("http://gnielee.iyunv.com", "Gnie's Blog")
{
IconReference = new IconReference("C:\\Program Files\\Internet Explorer\\iexplore.exe", 0)
};
jumpList.AddUserTasks(notepadTask, paintTask, jlSeparator, linkTask);
jumpList.Refresh();
}
  在上面程序中,通过IJumpListTask 接口创建了“程序链接”(JumpListLink,其中IconReference 为链接图标)和“分割线”(JumpListSeparator);使用AddUserTasks 方法时注意每个链接的位置关系;最后必须使用Refresh 方法对JL 进行刷新才能显示出最新的JL 内容(如下效果图)。
DSC0003.png
  

创建Known Category 列表
  在使用Known Category 功能前,需要先为程序注册文件类型,随后可通过KnownCategoryToDisplay 属性将Known Category 预设为“Recent”、“Frequent”、“Neither” 中的任意一种类型,当测试程序打开某个的文件时,相应的文件链接就会显示在Known Category 列表中。如下代码所示:

if (!Utilities.IsApplicationRegistered(TaskbarManager.Instance.ApplicationId))
{
Utilities.RegisterFileAssociations(TaskbarManager.Instance.ApplicationId, false,
TaskbarManager.Instance.ApplicationId, Assembly.GetExecutingAssembly().Location,
".jpg", ".png", ".gif", ".JPG", ".PNG", ".GIF");
}
jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;
CommonOpenFileDialog cfd = new CommonOpenFileDialog();
cfd.ShowDialog();
jumpList.Refresh();
  打开demo.png 文件后的JL 效果:
DSC0004.png
  
  JumpListKnownCategoryType 枚举中定义了Known Category 的三种类型:“Neither”、“Recent”、“Frequent”,还可以通过KnownCategoryOrdinalPosition 属性可以修改Known Category 在JL 中的位置:

switch (this.knownCategory.SelectionBoxItem.ToString())
{
case "None":
jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Neither;
break;
case "Recent":
jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent;
break;
case "Frequent":
jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Frequent;
break;
}
jumpList.KnownCategoryOrdinalPosition = Convert.ToInt32(this.categoryPostion.SelectionBoxItem.ToString());
jumpList.Refresh();
  将Recent 修改为Frequent 后的效果:
DSC0005.png
  

创建Custom Category 列表
  如同上文创建JumpList 的方式,1. 通过JumpListCustomCategory 类创建“自定义分类”列表实例。2. 由JumpListCustomCategory(string categoryName) 方法为列表命名。3. 使用AddJumpListItems 方法将链接加入到分类中。如下代码所示:

private JumpListCustomCategory customCategory;
private void addCus_Click(object sender, RoutedEventArgs e)
{
if (this.categoryName.Text.Length > 0)
{
customCategory = new JumpListCustomCategory(this.categoryName.Text);
jumpList.AddCustomCategories(customCategory);
JumpListLink jlItem = new JumpListLink(Assembly.GetExecutingAssembly().Location, this.categoryName.Text + ".png")
{
IconReference = new IconReference(Assembly.GetEntryAssembly().Location, 0)
};
customCategory.AddJumpListItems(jlItem);
jumpList.Refresh();
}
}
DSC0006.png        DSC0007.png   
                                                                   KnownCategoryOrdinalPosition效果
  
  在上面代码中IconReference 取自应用程序本身的Icon 属性,前提是需要在应用程序属性中为其设置图标资源(如下图所示)。至此,在Windows 7 中对任务栏的相关开发已全部完成,希望本系列对大家有所帮助。
DSC0008.png
  

系列文章索引
  · Windows 7 任务栏开发 之 覆盖图标(Overlay Icon)
  · Windows 7 任务栏开发 之 进度条(Progress Bar)
  · Windows 7 任务栏开发 之 缩略图预览(Thumbnail)
  · Windows 7 任务栏开发 之 缩略图工具栏(Thumbnail Toolbar)
  

相关参考资料
  1. Jump into the Windows 7 Taskbar Jump Lists
http://channel9.msdn.com/posts/yochay/Jump-into-the-Windows-7-Taskbar-Jump-Lists/
  2. Windows 7 Jump Lists
http://blogs.msdn.com/coding4fun/archive/2009/12/09/9933039.aspx
  3. IconReference – Using own icons
http://dennisdel.com/?p=38
  

完整源代码下载

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-64909-1-1.html 上篇帖子: Windows Phone 7 开发 31 日谈——第12日:使手机震动 下篇帖子: Windows Phone 7应用之Tencent微博——封装API[上篇]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表