Uwp 以编程方式获取appxmanifest启动屏幕图像和背景

Uwp 以编程方式获取appxmanifest启动屏幕图像和背景,uwp,Uwp,我正在构建一个UWP库来实现一些常见的应用程序功能,比如扩展的启动屏幕,它显然必须看起来像应用程序的 在一个我无法控制的应用程序中,有没有办法通过编程获得启动屏幕的图像和背景颜色 当然,我可以让应用程序开发人员在某个地方指定它们,但最好避免重复并使其正常工作:Approach 1 毕竟,appxmanifest只是一个XML文件,在解决方案资源管理器中右键单击它并选择查看代码来检查它,它将作为应用程序包的一部分进行部署。这意味着您可以从应用程序中读取其内容: var doc = XDocumen

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

在一个我无法控制的应用程序中,有没有办法通过编程获得启动屏幕的图像和背景颜色

当然,我可以让应用程序开发人员在某个地方指定它们,但最好避免重复并使其正常工作:

Approach 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或已知的颜色说明符,例如红色、矢车菊蓝、透明等,因此您需要花费一些额外的精力来解码此值以供重用

此外,您当然应该小心执行空检查、捕获异常等,因为此代码段基于的假设可能在未来版本的框架中不成立,例如MS可能会更改XML模式等

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

如果您能够拦截构建/应用程序打包过程,那么您可以在将appxmanifest文件添加到应用程序包之前对其进行操作。 如果要创建应用程序,可以将这两个值声明为,以便要求使用模板的任何开发人员在创建项目时同时指定应用程序颜色和启动屏幕图像。使用$customParameter$语法在C代码和appxmanifest文件中引用这些值,例如:。但是,请注意,开发人员显然可以在以后更改这些值。此外,当采用这种方法时,您需要确保在appxmanifest文件中替换模板参数,如中所述。 方法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或已知的颜色说明符,例如红色、矢车菊蓝、透明等,因此您需要花费一些额外的精力来解码此值以供重用

此外,您当然应该小心执行空检查、捕获异常等,因为此代码段基于的假设可能在未来版本的框架中不成立,例如MS可能会更改XML模式等

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

如果您能够拦截构建/应用程序打包过程,那么您可以在将appxmanifest文件添加到应用程序包之前对其进行操作。 如果要创建应用程序,可以将这两个值声明为,以便要求使用模板的任何开发人员在创建项目时同时指定应用程序颜色和启动屏幕图像。使用$customParameter$语法在C代码和appxmanifest文件中引用这些值,例如:。但是,请注意,开发人员显然可以在以后更改这些值。此外,当采用这种方法时,您需要确保在appxmanifest文件中替换模板参数,如中所述。
对于用户,你是指最终用户还是开发人员?开发人员,很抱歉混淆。对于用户,你是指最终用户还是开发人员?开发人员,很抱歉混淆。谢谢。最后我读了清单,思考着如何翻译颜色。对其他感兴趣的人来说。如果有人以后读到这篇文章,请稍加修改;要使用的背景色是SplashScreen元素中的背景色,而不是父VisualElements元素中的背景色。谢谢。最后我读了清单,思考着如何翻译颜色。对其他感兴趣的人来说。如果有人以后读到这篇文章,请稍加修改;要使用的背景色是SplashScreen元素中的背景色,而不是父VisualElements元素中的背景色。