原文:UwpDesktop!WPF也能开发Surface Dial

前段时间巨硬发布了一款新的输入设备Surface Dial,配合Surface Studio使用简直炫酷到没朋友。

本人由于公司业务有幸参与了微软的相关培训,最大的收获觉得是发现WPF居然也可以开发Dial, WPF居然可以使用UWP的API!

不卖关子,关键就是名为“UwpDesktop”的一个Nuget,在我们的WPF程序中添加这个nuget就可以了。上一篇文章中写的WPF起调UWP也借助了这个nuget。

由于我们的现有解决方案是拿wpf做的,所以培新间歇我直奔主题,就问老外这个东西滋不滋磁WPF,得到的答案是肯定的。那怎么用呢,有没有demo呢,还真有,那再麻烦您拷给我吧,,,于是有了下面的demo

我还是直接贴代码吧,

public MainWindow(){InitializeComponent();//SetRadialControllerConfiguration();var interop = (IRadialControllerInterop)System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.GetActivationFactory(typeof(RadialController));Guid guid = typeof(RadialController).GetInterface("IRadialController").GUID;Window window = Window.GetWindow(this);var wih = new WindowInteropHelper(window);IntPtr hWnd = wih.Handle;// Create a reference to the RadialController.radialController = interop.CreateForWindow(hWnd, ref guid);string iconFileName = "Assets\\dial_icon_custom_item.png";string filePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, iconFileName);var getItemImageOperation = StorageFile.GetFileFromPathAsync(filePath);getItemImageOperation.Completed += new AsyncOperationCompletedHandler<StorageFile>(AddMenuItemFromImage);// Declare input handlers for the RadialController.radialController.RotationChanged += RadialController_RotationChanged; ;}

还有个很关键的类RadialControllerInterfaces.cs

  [System.Runtime.InteropServices.Guid("787cdaac-3186-476d-87e4-b9374a7b9970")][System.Runtime.InteropServices.InterfaceType(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIInspectable)]interface IRadialControllerConfigurationInterop{RadialControllerConfiguration GetForWindow(IntPtr hwnd, [System.Runtime.InteropServices.In]ref Guid riid);}[System.Runtime.InteropServices.Guid("1B0535C9-57AD-45C1-9D79-AD5C34360513")][System.Runtime.InteropServices.InterfaceType(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIInspectable)]interface IRadialControllerInterop{RadialController CreateForWindow(IntPtr hwnd, [System.Runtime.InteropServices.In]ref Guid riid);}

这个类提供了CreateForWindow方法可以让我们创建RadialController对象,个人觉得这个接口很玄乎,上边的Guid特性(这个是叫特性吧?)是写死的,问了工程师说这个不用改,这不就很坑了,如果不是有个demo,我怎么知道怎么写,,,

作为弱鸡,这里我也有问题请教大家:

1.这些特性的作用,平时自己写代码貌似只用过【datacontract】

 
[System.Runtime.InteropServices.Guid("1B0535C9-57AD-45C1-9D79-AD5C34360513")]
[System.Runtime.InteropServices.InterfaceType(System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIInspectable)]    

2.MainWindow中代码

var interop = (IRadialControllerInterop)System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeMarshal.GetActivationFactory(typeof(RadialController));

总觉得阅读性这么差呢,看不懂,或许是我从未见过,对这个方法不熟?

微软工程师给我的这个Demo我发现有两个Bug(他本人也表示还没写完,是Dirty Demo),一个是SetRadialControllerConfiguration这个方法里异常,不能用,导致不能初始化Dial的菜单,每次启动应用都会往菜单里

添加一项;另一个是焦点问题,当长按dial选择了其他菜单,例如音量,再返回我们的demo,发现此时dial仍然控制的是音量

由于本人太弱,就不多说了,末尾附上Dr.Neil的demo大家自己研究下,也希望大家留言评论解答我的疑惑

链接: http://pan.baidu.com/s/1boJrIbH 密码: h722


UwpDesktop!WPF也能开发Surface Dial相关推荐

  1. wpf控件开发基础(1)

    从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...

  2. WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)

    原文:WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu) 在上一篇中我们完成了快捷工具栏的开发,本篇将讲解应用程序菜单开发的相关内容.如下图所示,点击程序窗口左上角的 ...

  3. WPF 4 Ribbon 开发 之 标签工具栏(Tab Toolbar)

    本篇将开始介绍标签工具栏的开发内容,标签工具栏可以说是Ribbon 的核心部分,应用程序所有的功能特性都会集中在这里,一个强大的Ribbon 工具栏也是一款软件成功的关键.在开始前还是先来看看标签工具 ...

  4. WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(https://blog.csdn.net/lzuacm/ar ...

  5. 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器

    从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 这段时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...

  6. WPF控件开发之自定义控件(1)

    Windows Presentation Foundation (WPF) 控件模型的扩展性极大减少了创建新控件的需要.但在某些情况下,仍可能需要创建自定义控件.本主题讨论可最大限度减少在 Windo ...

  7. WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序

    原文:WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序 前面我讲了在win7下使用模拟器,进行调试模拟多点触摸,其实际开发中这样也比较麻烦.. 要拿几个鼠标. 所以更多的人会 买个触摸套 套 ...

  8. WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)

    在Office 2007 和Windows 7 两款产品中微软开始引入了一种新概念:"Ribbon 工具栏",Ribbon 工具栏的界面设计模式可以使用户方便快捷的找到所需的工具, ...

  9. wpf首次项目开发技术总结wpf页面

    对于初次面对这么一个曾未接触的wpf项目,我们的历程是艰辛的,但我们的收获是不菲的,就学术型的收获就已经比我在学校课堂的收获多很多啊!现在我技术总结在此,以便留作技术总结. 首先,我们在vs2010的 ...

  10. WPF程序员开发案例

    引子:  WPF一个简单的应用思路 目录: 第一部分:构建的基本思路及技能 1.创建基本工程 2.Page布局设计 3.WPF样式 4.WPF事件 5.WPF页面动态生成 第二部分:Page高级机制 ...

最新文章

  1. kettle mysql 配置_Kettle数据库配置抽离
  2. 从零开始学习jQuery (五) 事件与事件对象
  3. 英语语法---数词详解
  4. php如何制作视频特效,用PS将bmp图片制作出漂亮的动态视频效果
  5. 数据结构--树形结构
  6. 证券期货行业监管大数据治理方案研究
  7. sybase修改密码
  8. leetcode:Excel Sheet Column Number
  9. html是一种用于创建网页的标准标记语言,html
  10. C# 弹出输入框取值
  11. 【Spring Cloud】保护机制-Hystrix
  12. 验光黑科技时代!星创视界首创眼镜店医疗验光
  13. Cadence orcad cis数据库搭建及access元器件数据库下载
  14. Fliqlo时钟屏保无毒Windows/Mac版
  15. Android 快速索引(城市列表和联系人)
  16. exchange服务器没有响应,exchange服务没法启动!急!
  17. 云计算与虚拟化的关系是什么?
  18. 三年级计算机 键盘指法 教案,三年级下册信息技术教案-第06课键盘指法练习浙江摄影版(新)...
  19. 显示器不亮电源灯闪_电脑开机显示器指示灯一闪一闪的屏幕就是不亮
  20. UE4_UE5蓝图command节点的使用(开启关闭屏幕响应-log-发布全屏显示)

热门文章

  1. 【转载】使用Lucene.NET实现数据检索功能
  2. 提升网络销售转化率的10种方法
  3. Swift 新建 APP 黑屏问题
  4. 网络七层,五层,四层模型,数据封装、解封装,进制转换。
  5. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 18. 基于Claim和Policy的授权 下 - 自定义Policy...
  6. 关于LAMP配置Let’s Encrypt SSL证书
  7. IONIC2/3解决文本框获取焦点的问题
  8. Rails的静态资源管理
  9. 从零开始攻略PHP(9)——错误和异常处理
  10. 快速的mysql导入导出数据(load data和outfile)