UwpDesktop!WPF也能开发Surface Dial
原文: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的更多相关文章
- Surface Dial 与 Windows Wheel UWP应用开发
随着微软发布 Surface Studio 在演示视频中非常抢眼的一个配件就是 Surface Dial,Dial 是Windows输入设备大家庭中的新成员我们把它归类为Windows Wheel 类 ...
- 如何为Surface Dial设备开发自定义交互功能
随着Surface Studio的发布,微软发布了与之相配套的外设硬件Surface Dial,用户可以将Surface Dail吸附在Surface Studio的屏幕上面,用旋转和点击的实体操作来 ...
- UWP 手绘视频创作工具技术分享系列 - Ink & Surface Dial
本篇作为技术分享系列的第四篇,详细讲一下手绘视频中 Surface Pen 和 Surface Dial 的使用场景. 先放一张微软官方商城的图,Surface 的使用中结合了 Surface Pen ...
- 从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器
从0到1:使用Caliburn.Micro(WPF和MVVM)开发简单的计算器 之前时间一直在使用Caliburn.Micro这种应用了MVVM模式的WPF框架做开发,是时候总结一下了. Calibu ...
- WPF一步步开发XMPP IM客户端1:入门
[起因&目标] 因为工作原因接触openfire服务端和spark客户端开发,主要是基于openfire扩展开发了针对企业用途的服务器插件,还开发了各个平台上的客户端(Windows\mac\ ...
- wpf控件开发基础
wpf控件开发基础(3) -属性系统(2) http://www.cnblogs.com/Clingingboy/archive/2010/02/01/1661370.html 这个有必要看看 wpf ...
- #WPF的3D开发技术基础梳理
原文:#WPF的3D开发技术基础梳理 自学WPF已经有半年有余了,一遍用,一边学.但是一直没有去触摸WPF的3D开发相关技术,因为总觉得在内心是一座大山,觉得自己没有能力去逾越.最近因为一个项目的相关 ...
- wpf控件开发基础(3) -属性系统(2)
原文:wpf控件开发基础(3) -属性系统(2) 上篇说明了属性存在的一系列问题. 属性默认值,可以保证属性的有效性. 属性验证有效性,可以对输入的属性进行校验 属性强制回调, 即不管属性有无发生变化 ...
- wpf控件开发基础(4) -属性系统(3)
原文:wpf控件开发基础(4) -属性系统(3) 知识回顾 接上篇,上篇我们真正接触到了依赖属性的用法,以及依赖属性的属性元数据的用法,并且也实实在在地解决了之前第二篇提到的一系列问题.来回顾一下 属 ...
随机推荐
- How to use WinSCP with public key authentication
http://www.techrepublic.com/blog/it-security/how-to-use-winscp-with-public-key-authentication/ ...
- [RxJSv& Javascript] forkJoin (reactive Promise.all) & Map
forkJoin: When all observables complete emit the last value from each. productMap: Map<number, IP ...
- windows下 管理员身份启动java进程
http://blog.csdn.net/zhuyijian135757/article/details/38234757
- Redis内存管理的基石zmallc.c源代码解读(一)
当我第一次阅读了这个文件的源代码的时候.我笑了,忽然想起前几周阿里电话二面的时候,问到了自己定义内存管理函数并处理8字节对齐问题. 当时无言以对,在面试官无数次的提示下才答了出来,结果显而易见,挂掉了 ...
- POJ 3714 Raid(平面近期点对)
解题思路: 分治法求平面近期点对.点分成两部分,加个标记就好了. #include <iostream> #include <cstring> #include <cst ...
- 常用的iOS开发或者优化的小工具
下面介绍一下我常用的iOS开发或者优化的小工具 由于很多工具大多数博客都已经介绍过了,我就列举一些我认为还不错但是大家不常列举的: Crafter https://github.com/krzyszt ...
- MySQL数据库备份详解
原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据 ...
- Cocos2d-x 脚本语言Lua基本语法
Cocos2d-x 脚本语言Lua基本语法 前面一篇博客对Lua这门小巧的语言进行了简单的介绍.本篇博客来给大家略微讲一下Lua的语法.不会长篇累牍得把Lua的全部语法都讲一遍,这里通过下面几点来讲L ...
- 手机预览微信小程序
1. 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的“设置”-“开发者设置”中,查看到微信小程序的 AppID 了,注意不可直接使用服务号或订阅 ...
- 快速删除 jar 里面的 BuildConfig.class
快速删除 jar 里面的 BuildConfig.class 起因:多个 jar 包里面的 BuildConfig.class 文件导致编译冲突. 方法一:土方法 使用 jar 解包 jar xf x ...