本篇文章给大家谈谈Windows8运行时,以及WinRT/Windows应用商店应用程序/Windows10通用应用程序与Silverlight和WPF相比如何?[关闭]的知识点,同时本文还将给你拓展
本篇文章给大家谈谈Windows 8 运行时,以及WinRT/Windows 应用商店应用程序/Windows 10 通用应用程序与 Silverlight 和 WPF相比如何?[关闭]的知识点,同时本文还将给你拓展CodeGo.net>如何迁移一个Windows Phone应用程序(8.1 XAML),它在Windows商店中实时迁移到8.1 Silverlight?、Silverlight Out-of-Browser应用程序不会使用MainWindow.Close方法关闭、Silverlight to Windows 10 通用应用移植工具预览、silverlight – Windows Phone 7关闭应用程序等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Windows 8 运行时(WinRT/Windows 应用商店应用程序/Windows 10 通用应用程序)与 Silverlight 和 WPF相比如何?[关闭]
- CodeGo.net>如何迁移一个Windows Phone应用程序(8.1 XAML),它在Windows商店中实时迁移到8.1 Silverlight?
- Silverlight Out-of-Browser应用程序不会使用MainWindow.Close方法关闭
- Silverlight to Windows 10 通用应用移植工具预览
- silverlight – Windows Phone 7关闭应用程序
Windows 8 运行时(WinRT/Windows 应用商店应用程序/Windows 10 通用应用程序)与 Silverlight 和 WPF相比如何?[关闭]
我试图了解用于创建Metro风格应用程序的新
Windows 8
运行时。我知道您可以将它与XAML一起使用,它基于
.NET,因此 C# 和 VB.NET 可用于编写应用程序,但它似乎与 HTML、CSS、DOM 和 JavaScript 有关。
有人可以用.NET UI 程序员可以理解的几段来解释它是什么吗?(我错过了理解它所必需的“嘿”。)
我们都知道
WPF、Silverlight、Windows
Forms等至少在 Intel 系统上将继续在 Windows
8(和 Windows 10)下工作,所以请不要告诉我…
答案1
小编典典在最低级别,WinRT 是在 ABI 级别上定义的对象模型。它使用 COM 作为基础(因此每个 WinRT
对象都实现IUnknown
并执行引用计数),并从那里构建。与旧的 COM 相比,它确实添加了很多新概念,其中大部分直接来自 .NET -
例如,WinRT 对象模型具有委托,并且事件以 .NET 样式完成(具有委托和添加/删除订阅者方法,每个事件一个),而不是事件源和接收器的旧 COM
模型。在其他值得注意的事情中,WinRT 还具有参数化(“通用”)接口。
另一大变化是所有 WinRT 组件都有可供它们使用的元数据,就像 .NET 程序集一样。在 COM 中,你有点像 typelibs 那样,但不是每个 COM
组件都有它们。对于 WinRT,元数据包含在 .winmd 文件中 - 查看 Developer Preview 中的“C:\Program Files
(x86)\Windows Kits\8.0\Windows Metadata\”。如果您四处寻找,您会发现它们实际上是没有代码的 CLI
程序集,只是元数据表。实际上,您可以使用 ILDASM 打开它们。请注意,这并不意味着 WinRT 本身是受管理的 - 它只是重用文件格式。
然后根据该对象模型实现了许多库 - 定义 WinRT 接口和类。再次,查看上面提到的“Windows 元数据”文件夹,看看里面有什么;或者只是在 VS
中启动对象浏览器并在框架选择器中选择“Windows 8.0”,以查看涵盖的内容。那里有很多,而且它不仅仅处理 UI -
您还可以获得诸如Windows.Data.Json
, or Windows.Graphics.Printing
,
or之类的命名空间Windows.Networking.Sockets
。
然后你会得到几个专门处理 UI 的库——这些库大多是Windows.UI
or下的各种命名空间Windows.UI.Xaml
。其中很多与
WPF/Silverlight
命名空间非常相似——例如Windows.UI.Xaml.Controls
,非常匹配System.Windows.Controls
;同上Windows.UI.Xaml.Documents
等
现在,.NET 能够直接引用 WinRT 组件,就好像它们是 .NET 程序集一样。这与 COM 互操作不同 -
您不需要任何中间工件,例如互操作程序集,您只需/r
一个 .winmd 文件,并且元数据中的所有类型及其成员都对您可见,就好像它们是 .NET
对象一样。请注意,WinRT 库本身是完全本机的(因此使用 WinRT 的本机 C++ 程序根本不需要 CLR) - 将所有这些东西公开为托管的魔法在
CLR 本身内部,而且级别相当低。如果您创建一个引用 .winmd 的 .NET 程序,您会发现它实际上看起来像一个外部程序集引用 -
没有诸如类型嵌入之类的花招。
这也不是一个生硬的映射 - CLR 会尽可能将 WinRT 类型调整为它们的等价物。因此,例如 GUID、日期和 URI
分别变为System.Guid
、System.DateTime
和System.Uri
;WinRT
集合接口,例如IIterable<T>
andIVector<T>
成为IEnumerable<T>
and IList<T>
;等等。这是双向的
- 如果您有一个实现 .NET 对象IEnumerable<T>
并将其传递回 WinRT,它会将其视为IIterable<T>
.
最终,这意味着您的 .NET Metro 应用程序可以访问现有标准 .NET 库的子集,以及(本机)WinRT 库,其中一些 -
特别是Windows.UI
- 在 API 方面看起来与 Silverlight 非常相似。您仍然有 XAML 来定义您的 UI,并且您仍然处理与
Silverlight 中相同的基本概念 - 数据绑定、资源、样式、模板等。在许多情况下,可以简单地通过using
新的命名空间来移植
Silverlight 应用程序,并调整代码中调整 API 的几个地方。
WinRT 本身与 HTML 和 CSS 没有任何关系,它与 JavaScript 的关系只是在某种意义上它也暴露在那里,类似于它为 .NET
所做的事情。当您在 .NET Metro 应用程序中使用 WinRT UI 库时,您不需要处理
HTML/CSS/JS(好吧,我想,如果您真的想要,您可以托管一个WebView
控件......)。您的所有 .NET 和 Silverlight
技能在此编程模型中仍然非常重要。
CodeGo.net>如何迁移一个Windows Phone应用程序(8.1 XAML),它在Windows商店中实时迁移到8.1 Silverlight?
我有一个用8.1 XAML编写的Windows应用商店中已有的应用程序.由于XAML版本中的某些兼容性问题,我们在8.1 SilverLight中重新编写了该应用程序.
但是,现在的问题是,我无法将silverlight应用程序包作为对现有应用程序的更新上传到Windows应用商店.我怎样才能做到这一点?
更新:实际问题不在打包时,我已经成功将应用程序的新Silverlight版本打包到XAP文件中.当我尝试上传到商店网站时,会出现此问题.它不允许我提交XAP文件(如果是Appx软件包),因为我已经拥有带有Appx软件包的实时版本.我该如何解决?
解决方法:
这是有记录的限制.您不能从Appx向Xap倒退.查看Guidance for app package management
When an app has a published Windows Phone 8.1 .appx, subsequent
updates must either have a Windows Phone 8.1 .appx or Windows Phone
8.1 .appxbundle. In other words, a Windows Phone 8.1 XAP is not allowed. This applies to an .appxupload that contains a Windows Phone
8.1 .appx as well.
Silverlight Out-of-Browser应用程序不会使用MainWindow.Close方法关闭
>这是一个值得信赖的应用程序(不适用于我的应用程序)
>在Application.Startup事件完成之前(对我的应用程序不适用)
>响应用户启动的操作,例如,在按钮Click事件处理程序中(这是我想要工作的)
在我试图让它工作的过程中,我把事情变得非常简单,并且直接在按钮点击事件处理程序后面的代码中调用方法,如下所示,但它没有任何效果.
void closeButton_Click(object sender,RoutedEventArgs e) { var mainWindow = Application.Current.MainWindow; mainWindow.Close(); }
当我附加调试器并设置“抛出异常时中断”时,我可以看到异常
SecurityException: Access to the property or method call is not
allowed unless the application has elevated permissions,or the code
was called through a user initiated action.
有什么想法为什么我的代码不被视为用户启动的操作?
我已经尝试在XAML和代码隐藏中附加事件处理程序(不是在同一时间)
<Button x:Name="closeButton" Content="Close" Click="closeButton_Click" />
要么
closeButton.Click += closeButton_Click;
没有成功.我已经非常仔细地阅读了User-Initiated Events文档,并且无法理解为什么我的代码不被视为用户启动.我已经在调试和发布模式下以及没有成功附加调试器时尝试了这一点.如果我将“在浏览器外部运行时需要提升的信任”更改为true,则关闭调用将按预期工作.
我已经重新定义了我的应用程序要求来解决这个问题,但我真的很想了解我做错了什么;-)
更新:SonOfPirate的答案表明此方法的文档不准确,但我不相信.使用反射工具dotPeek抛出异常的方法是
private void CheckForPermissions() { if (!Application.Current.HasElevatedPermissions && !XcpImports.IsUserInitiatedAction() && Application.Current.ApplicationStarted) throw new SecurityException(Resx.GetString("Window_AccessNotAllowed")); }
我觉得这有点令人困惑,所以我已经嘲笑了代码并为它编写了单元测试,如gist所示,你可以从结果中看到我应该可以从一个不受信任的应用程序调用close,前提是它是用户启动.
安全异常消息
Access to the property or method call is not allowed unless the application has elevated permissions,or the code was called through a user initiated action.
也表明它应该是可能的,所以我回到了这个问题 – 为什么这个代码不被认为是用户启动的?
解决方法
You can call this method only in the following cases:
- In response to a user-initiated action,for example,in a button Click event handler.
- Before the Application.Startup event has completed (that is,in an Iapplicationservice.StartService method,an IApplicationLifetimeAware.Starting
method,or a Startup event handler).- In a trusted application.
如您所见,您需要启用提升的信任.
UPDATE
我承认,微软使用的措辞有点误导,与前三种情况相结合的前两种情况都是如此.如果措辞更准确,也许会更清楚:
You can call this method only in a trusted application in either of the following cases:
- In response to a user-initiated action,an IApplicationLifetimeAware.Starting method,or a Startup event handler).
Silverlight to Windows 10 通用应用移植工具预览
今天 Mobilize.NET 推出了 Silverlight to Windows 10 通用应用移植工具的预览版,可以让 WP Silverlight 8.X 应用移植到 Windows 10 通用应用平台。
正如微软在 Build 2015 上宣布的,Moblize.NET 的移植工具是免费的,并会直接整合到 Visual Studio。该工具目前支持 700 个最常用的 API 映射和 Manifests、API、XAML、NuGet 包管理的处理,以及 Async/Await 改动。
迁移到 Windows 10 通用应用平台之后,开发者将可以让应用快速运行于 PC、手机、Xbox、HoloLens 或甚至嵌入式平台。(via Windows)
silverlight – Windows Phone 7关闭应用程序
解决方法
您可以尝试的一个选项是使用WP7导航服务以编程方式导航回应用程序。不知道如果这将工作,虽然。你为什么需要退出?
今天关于Windows 8 运行时和WinRT/Windows 应用商店应用程序/Windows 10 通用应用程序与 Silverlight 和 WPF相比如何?[关闭]的介绍到此结束,谢谢您的阅读,有关CodeGo.net>如何迁移一个Windows Phone应用程序(8.1 XAML),它在Windows商店中实时迁移到8.1 Silverlight?、Silverlight Out-of-Browser应用程序不会使用MainWindow.Close方法关闭、Silverlight to Windows 10 通用应用移植工具预览、silverlight – Windows Phone 7关闭应用程序等更多相关知识的信息可以在本站进行查询。
本文标签: