我正在构建一个UWP库来实现一些常见的应用程序功能,例如扩展的启动画面,显然必须看起来像应用程序。
有没有办法在我无法控制的应用程序中以编程方式获取启动画面的图像和背景颜色?
(当然我可以让应用程序开发人员在某处指定它们,但是避免重复并让它“正常工作”会很好:))
答案 0 :(得分:4)
毕竟,appxmanifest只是一个XML文件(在解决方案资源管理器中右键单击它并选择查看代码进行检查),它将作为应用程序包的一部分进行部署。这意味着您可以在应用内阅读其内容:
var doc = XDocument.Load("AppxManifest.xml", LoadOptions.None);
var xnamespace = XNamespace.Get("http://schemas.microsoft.com/appx/manifest/uap/windows10");
var visualElementsNode = doc.Descendants(xnamespace + "VisualElements").First();
var backgroundColor = visualElementsNode.Attribute("BackgroundColor").Value;
var splashScreenNode = visualElementsNode.Descendants(xnamespace + "SplashScreen").First();
var splashScreenPath = splashScreenNode.Attribute("Image").Value;
请注意,BackgroundColor
属性的值可能包含十六进制颜色代码(#RRGGBB
)或已知颜色说明符(例如Red
,CornflowerBlue
,{ {1}}等等,因此您需要花费额外的精力来解码此值以便重复使用。
此外,您当然应该小心进行空检查,捕获异常等,因为此代码段基于可能在框架的未来版本中不具备的假设(例如,MS可能会更改XML架构等)。 )
由于您的目标只是避免重复,另一种解决方案可能是要求开发人员在其他地方指定App颜色和启动屏幕图像,然后用这些值填充appxmanifest。如何实现这一点取决于您正在构建的确切用例:
Transparent
语法在C#代码和appxmanifest文件中引用这些值,例如:$customParameter$
。但请注意,开发人员显然可能会在之后更改这些值。此外,在遵循此方法时,您需要确保在appxmanifest文件中替换模板参数,如我在the following blog post中所述。