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相关推荐
- wpf控件开发基础(1)
从现在开始,我将尝试写有关wpf控件开发相关的知识,把文章这对我来说很难,所以这个系列的文章在时间跨度上可能会拖的比较长.我希望我介绍是比较详细的,而不仅仅是一个简单的控件开发流程.我是一个真正的We ...
- WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu)
原文:WPF 4 Ribbon 开发 之 应用程序菜单(Application Menu) 在上一篇中我们完成了快捷工具栏的开发,本篇将讲解应用程序菜单开发的相关内容.如下图所示,点击程序窗口左上角的 ...
- WPF 4 Ribbon 开发 之 标签工具栏(Tab Toolbar)
本篇将开始介绍标签工具栏的开发内容,标签工具栏可以说是Ribbon 的核心部分,应用程序所有的功能特性都会集中在这里,一个强大的Ribbon 工具栏也是一款软件成功的关键.在开始前还是先来看看标签工具 ...
- WPF框架教程 | 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Caliburn.Micro(https://blog.csdn.net/lzuacm/ar ...
- 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 这段时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...
- WPF控件开发之自定义控件(1)
Windows Presentation Foundation (WPF) 控件模型的扩展性极大减少了创建新控件的需要.但在某些情况下,仍可能需要创建自定义控件.本主题讨论可最大限度减少在 Windo ...
- WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序
原文:WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序 前面我讲了在win7下使用模拟器,进行调试模拟多点触摸,其实际开发中这样也比较麻烦.. 要拿几个鼠标. 所以更多的人会 买个触摸套 套 ...
- WPF 4 Ribbon 开发 之 快捷工具栏(Quick Access Toolbar)
在Office 2007 和Windows 7 两款产品中微软开始引入了一种新概念:"Ribbon 工具栏",Ribbon 工具栏的界面设计模式可以使用户方便快捷的找到所需的工具, ...
- wpf首次项目开发技术总结wpf页面
对于初次面对这么一个曾未接触的wpf项目,我们的历程是艰辛的,但我们的收获是不菲的,就学术型的收获就已经比我在学校课堂的收获多很多啊!现在我技术总结在此,以便留作技术总结. 首先,我们在vs2010的 ...
- WPF程序员开发案例
引子: WPF一个简单的应用思路 目录: 第一部分:构建的基本思路及技能 1.创建基本工程 2.Page布局设计 3.WPF样式 4.WPF事件 5.WPF页面动态生成 第二部分:Page高级机制 ...
最新文章
- kettle mysql 配置_Kettle数据库配置抽离
- 从零开始学习jQuery (五) 事件与事件对象
- 英语语法---数词详解
- php如何制作视频特效,用PS将bmp图片制作出漂亮的动态视频效果
- 数据结构--树形结构
- 证券期货行业监管大数据治理方案研究
- sybase修改密码
- leetcode:Excel Sheet Column Number
- html是一种用于创建网页的标准标记语言,html
- C# 弹出输入框取值
- 【Spring Cloud】保护机制-Hystrix
- 验光黑科技时代!星创视界首创眼镜店医疗验光
- Cadence orcad cis数据库搭建及access元器件数据库下载
- Fliqlo时钟屏保无毒Windows/Mac版
- Android 快速索引(城市列表和联系人)
- exchange服务器没有响应,exchange服务没法启动!急!
- 云计算与虚拟化的关系是什么?
- 三年级计算机 键盘指法 教案,三年级下册信息技术教案-第06课键盘指法练习浙江摄影版(新)...
- 显示器不亮电源灯闪_电脑开机显示器指示灯一闪一闪的屏幕就是不亮
- UE4_UE5蓝图command节点的使用(开启关闭屏幕响应-log-发布全屏显示)
热门文章
- 【转载】使用Lucene.NET实现数据检索功能
- 提升网络销售转化率的10种方法
- Swift 新建 APP 黑屏问题
- 网络七层,五层,四层模型,数据封装、解封装,进制转换。
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 18. 基于Claim和Policy的授权 下 - 自定义Policy...
- 关于LAMP配置Let’s Encrypt SSL证书
- IONIC2/3解决文本框获取焦点的问题
- Rails的静态资源管理
- 从零开始攻略PHP(9)——错误和异常处理
- 快速的mysql导入导出数据(load data和outfile)