Windows 7特性与项目更新

随着月底的临近,正忙于完成一些最后的收尾工作。尽管如此,确实想要更新一下当前项目的状态,并给予Windows 7一些关注!非常喜欢Windows 7,并且过去曾经写过一些关于使用其特性的文章……现在是时候将想法付诸实践了。

项目导航框架更新

在第三部分中,提到了在这个项目中使用的导航“框架”……更新了这个“框架”,使其能够自动地向JumpList添加NavigationPoints。让回顾一下:

要注册一个NavigationPoint:

C# _navigationService.RegisterNavigationPoint( new NavigationPoint() { Name = "Sales", Category = "Main", ShowInJumpList = true, Icon = "\\Images\\mycomputer.png" });

这将把一个NavigationPoint添加到导航面板中。如果ShowInJumpList设置为True,那么NavigationPoint也会被添加到JumpList中。

实现细节

要使JumpList工作,需要确保只有一个应用程序实例在运行,并且如果启动了新实例,它需要以某种方式将传入的参数发送回已经运行的原始版本(使用某种形式的IPC)。在原始系列文章《Windows 7任务栏解析》中,使用了Inter-process Mediator来促进这个“进程”。不过,Inter-process Mediator有一些缺陷。

话虽如此,决定尝试FishBowl应用程序中使用的SingleInstance实现。“Fishbowl将Facebook带到桌面。”要使他们的方法起作用,首先需要创建一个自定义的Main()方法(使用了这篇文档中解释的第三种方法)。

C# public static class OpenPOS_Main { [STAThread] public static void Main() { if (SingleInstance.InitializeAsFirstInstance("OpenPOS")) { var application = new App(); application.InitializeComponent(); application.Run(); // 允许单实例代码执行清理操作 SingleInstance.Cleanup(); } } }

并将正常的Main()内容包裹在SingleInstance.InitializeAsFirstInstance中。这将确保应用程序只会真正启动一次。一旦创建了第二个实例,就会触发一个事件……然后可以在ShellViewModel中处理这个事件。

C# SingleInstance.SingleInstanceActivated += new EventHandler(SingleInstance_SingleInstanceActivated);

在SingleInstance_SingleInstanceActivated事件处理程序中,可以导航到新传入的“View”。

创建JumpList

在WPF 4中,JumpList是内置的,所以不再需要Windows® API Code Pack for Microsoft® .NET Framework了……现在只需要这样做:

C# var jl = JumpList.GetJumpList(Application.Current);

这应该返回当前应用程序的JumpList……并添加或删除任何JumpTask。这是NavigationService中的CreateJumpList方法:

C# public void CreateJumpList() { var jl = JumpList.GetJumpList(Application.Current); jl.JumpItems.Clear(); for (int i = _navigationPoints.Count - 1; i >= 0; i--) { var point = _navigationPoints[i]; if (point.ShowInJumpList) { jl.JumpItems.Add(new JumpTask { Title = point.Name, CustomCategory = point.Category, IconResourceIndex = 0, IconResourcePath = Path.Combine(System.Environment.CurrentDirectory, "OpenPOS.exe"), Arguments = point.CreateArg(), ApplicationPath = Path.Combine(System.Environment.CurrentDirectory, "OpenPOS.exe") }); } } jl.Apply(); }

只是遍历所有的NavigationPoints,对于每个ShowInJumpList设置为true的NavigationPoint,都会被添加……

OpenPOS当前状态

  • 实现了销售模块
  • 实现了票据/支付(多支付)
  • 用户/导航管道
  • 实现了库存控制(可以添加或移除库存)
  • 实现了报告(使用开源WPF报告引擎)
  • 现金结算
  • 实现了基本的客户支持
  • 还有很多,很多……
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485