在 Win 10 Mobile 上返回屏幕尺寸的 Splashscreen Rect 坐标
Posted
技术标签:
【中文标题】在 Win 10 Mobile 上返回屏幕尺寸的 Splashscreen Rect 坐标【英文标题】:Splashscreen Rect coordinates returning Screen dimensions on Win 10 Mobile 【发布时间】:2015-12-17 07:47:11 【问题描述】:我正在尝试在需要 SplashScreen 图像坐标的 UWP 应用上创建扩展 SplashScreen。我在 App.xaml.cs 中使用以下代码:
protected override void OnLaunched(LaunchActivatedEventArgs e)
if (e.SplashScreen != null)
var SplashLocation = e.SplashScreen.ImageLocation;
//Rest of initialization...
但是,如果我检查 SplashLocation
这是一个 Rect
,SplashLocation.Height
和 SplashLocation.Width
返回 1280 和 768,这是我手机屏幕的尺寸。所有其他属性均为 0。
这是 Win 10 Mobile [build 10536] 中的已知错误吗?它在桌面 Windows 10 上运行良好。
【问题讨论】:
闪屏会覆盖整个手机屏幕吗? 没有。我只是用与设置的背景颜色不同的颜色制作了我的 splascreen 来检查它。闪屏显示为居中的图像。 你找到解决办法了吗,我也遇到了同样的问题。 感谢上帝,我没疯!哈哈。是的,我确实找到了一种似乎几乎可以正常工作的解决方法。一会儿我会贴出来。 它对你有用吗@KMan? 【参考方案1】:作为一种解决方法,这就是我所做的:
在 Grid
内的 XAML 中创建一个 Image
(而不是在 msdn 文档建议的 Canvas
内)
<Image Name="ExtSplash"
Stretch="Uniform"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Source="Assets/Splash/SplashScreen.png"/>
现在,诀窍是让它在移动设备(不能提供正确的Rect
坐标和桌面(按预期工作)上工作)
所以,在后面代码中Page
的加载事件中,我使用了这个代码:
if (splash.Top < splash.Left)
ExtSplash.Margin = new Thickness(splash.Top);
else
ExtSplash.Margin = new Thickness(splash.Left);
其中Splash = e.SplashScreen.ImageLocation
来自 App.xaml.cs 中的 OnLaunched 事件。
这是有效的,因为 Splash.Top
和 Splash.Left
在移动的情况下都返回 0。因此,该应用程序只显示完全扩展到宽度的启动画面。在桌面的情况下,图像可能有一些左坐标或上坐标,因为它在桌面上正确报告,我将它们设置为 Margin
用于居中对齐的均匀拉伸图像。
注意 1:在某些情况下,启动画面和 ExtendedSplash 图像之间可能会发生细微的变化。但在我的测试中,它运行良好。即使在以后的版本中 MS 修复了该问题,它也会继续工作,因此您可以花时间实现标准方法。
注意 2:如果提供了 400 比例的初始屏幕图像,我会遇到此逻辑的一些问题。出于某种原因,WM10 获得了可用的最高分辨率。所以我只提供了 100、125、150 和 200 比例的图像(跳过了 400)
【讨论】:
【参考方案2】:实际上问题在于 MSDN 文档中给出的代码是错误的。在 Github 上查看他们的示例。你可以在这里找到它: Splash Screen Sample
注意 MSDN 文档和示例之间的差异:
-
ExtendedSplash 不扩展页面
他们在电话中使用 ScaleFactor
XAML 的根元素是 Grid 而不是 page。
我遵循了他们的样本(经过数小时的思考),一切都很好。我希望他们更新他们的文档以反映正确的事情。
【讨论】:
很好的发现。您是否在最新的移动版本上尝试过 MSDN 版本?因为我的解决方法仍然有效,所以我没有在最近的版本上尝试过。如果它仍然不起作用,那么ScaleFactor
一定是原因。我看不出“不从 Page 扩展”会有什么不同。
我在最新版本上试过了,但还是不行。不从 Page 扩展与将 ExtendedSpash 作为内容添加到 RootFrame 一起使用,因此您也可以控制 statusBar 颜色【参考方案3】:
我最终放弃了SplashScreen.ImageLocation
方法。在撰写本文时,Microsoft tutorial 无法在移动设备上运行,而the sample 则很骇人听闻。相反,我对扩展的初始屏幕使用了这样的简单布局:
<Grid>
<Image x:Name="splashScreenImage" Source="Assets/SplashScreen.png" MaxWidth="620" MaxHeight="300"/>
<!-- plus some other control -->
</Grid>
神奇的是使用MaxWidth
/MaxHeight
。
在移动设备上,图像在垂直方向上的位置会略有不同(我猜是因为状态栏和导航栏),但在其他方面是正确的,包括大小。在桌面上,图像的位置和大小似乎与初始启动画面完全一致。
【讨论】:
你能发布你的PositionImage()
吗?
@ravikumar 我不再参与这个项目了,抱歉。以上是关于在 Win 10 Mobile 上返回屏幕尺寸的 Splashscreen Rect 坐标的主要内容,如果未能解决你的问题,请参考以下文章
Win10 Mobile RS2预览版14915现bug:操作中心遇“难关