以编程方式获取appxmanifest启动画面图像和背景

时间:2016-08-14 12:09:35

标签: uwp

我正在构建一个UWP库来实现一些常见的应用程序功能,例如扩展的启动画面,显然必须看起来像应用程序。

有没有办法在我无法控制的应用程序中以编程方式获取启动画面的图像和背景颜色?

(当然我可以让应用程序开发人员在某处指定它们,但是避免重复并让它“正常工作”会很好:))

1 个答案:

答案 0 :(得分:4)

方法#1

毕竟,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)或已知颜色说明符(例如RedCornflowerBlue,{ {1}}等等,因此您需要花费额外的精力来解码此值以便重复使用。

此外,您当然应该小心进行空检查,捕获异常等,因为此代码段基于可能在框架的未来版本中不具备的假设(例如,MS可能会更改XML架构等)。 )

方法#2

由于您的目标只是避免重复,另一种解决方案可能是要求开发人员在其他地方指定App颜色和启动屏幕图像,然后用这些值填充appxmanifest。如何实现这一点取决于您正在构建的确切用例:

  • 如果您能够拦截构建/应用程序打包过程,则可以在将appxmanifest文件添加到应用程序包之前对其进行操作。
  • 如果您要创建Visual Studio project template,则可以将这两个值声明为custom template parameters,以便在创建时使用该模板的任何开发人员都要求指定App颜色和启动画面图像项目。使用Transparent语法在C#代码和appxmanifest文件中引用这些值,例如:$customParameter$。但请注意,开发人员显然可能会在之后更改这些值。此外,在遵循此方法时,您需要确保在appxmanifest文件中替换模板参数,如我在the following blog post中所述。