前段时间巨硬发布了一款新的输入设备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】
<br/>
[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大家自己研究下,也希望大家留言评论解答我的疑惑
链接: 密码: h722
<br/><br/>
编辑推荐:
- WPF开发Surface Dial实例教程02-21
- System.Object是什么?如何使用System.Object?02-21
- MVC 5限制所有HTTP请求必须是POST方式02-21
- ItemsControl 的布局控件实例02-21
- 分享用.Net Core实现图片上传下载的实例教程02-21
- 最新开源DBLayer的详细介绍02-21
- C#中匿名委托以及Lambda表达式的实例详解02-21
- asp .net 面试题及答案分享02-21
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- MVC 5限制所有HTTP请求必须是POST方式
MVC 5限制所有HTTP请求必须是POST方式
26-02-21 - 分享用.Net Core实现图片上传下载的实例教程
分享用.Net Core实现图片上传下载的实例教程
26-02-21 - asp .net 面试题及答案分享
asp .net 面试题及答案分享
26-02-21 - wcf什么意思?关于wcf的实例教程
wcf什么意思?关于wcf的实例教程
26-02-21 - C# 并行任务之Parallel类的实例介绍
C# 并行任务之Parallel类的实例介绍
26-02-21 - Win10预览版10041反馈功能的改进让分类更清晰
Win10预览版10041反馈功能的改进让分类更清晰
26-02-21 - win10企业版如何激活,怎么激活Win10企业版
win10企业版如何激活,怎么激活Win10企业版
26-02-21 - 最新Win10预览版10049中可关闭Flash Player
最新Win10预览版10049中可关闭Flash Player
26-02-21 - 什么是构造器?引用类型是什么?
什么是构造器?引用类型是什么?
26-02-21 - 怎么操作 ASP.NET Web API ?
怎么操作 ASP.NET Web API ?
26-02-21
