在 UWP 中隐藏状态栏

Hide status bar in UWP

我使用下面的代码来隐藏 UWP 中的状态栏。当我 运行 应用程序在我的计算机上处​​于开发模式时,状态栏未显示在 windows phone 中。我在 Windows 商店中部署了该应用程序,下载该应用程序后,我看到状态栏出现在我的应用程序中。

这是我的代码:

var isAvailable = Windows.Foundation.Metadata.ApiInformation.IsTypePresent(typeof(StatusBar).ToString());
   if (isAvailable)
       hideBar();

async void hideBar()
{
   StatusBar bar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView();
   await bar.HideAsync();
}

问题是,为什么上面的代码在 windows 商店中不起作用? 此外,我在 windows 商店中为我的应用程序 App link 添加了 link,但是当我在 windows 商店中搜索确切的关键字时,我的应用程序未显示在 windows 商店,但单击 link 会在 window 商店中显示我的应用程序。

谢谢!

检查 Contract,而不是 StatusBar 类型对我来说很好。

private async Task InitializeUi()
{
    // If we have a phone contract, hide the status bar
    if (ApiInformation.IsApiContractPresent("Windows.Phone.PhoneContract", 1, 0))
    {
        var statusBar = StatusBar.GetForCurrentView();
        await statusBar.HideAsync();
    }
}

您必须使用 FullName 而不是 ToString():

...
ApiInformation.IsTypePresent(typeof(StatusBar).FullName);
...

会不会是当您在 Release 中使用 .NET Native 工具链进行编译时,类型信息被丢弃,因此您没有传递您认为传递的字符串?也许您可以尝试对完整的类型名称进行硬编码?

在Windows10中命令是 Window.Current.SetTitleBar(空);

此代码将无法运行,因为在 .Net Native 编译(Store 会编译)之后,typeof(StatusBar).ToString() 将不会 return 文字类型名称如您所愿,但 return 类似于 "EETypeRVA:0x00021968"。请改用文字字符串(您不会重命名 StatusBar,对吗?;)或使用 IsApiContractPresent 或 typeof(StatusBar).FullName(如前所述)。 P.S。同样的问题可以在不发布的情况下重现,只需 运行 使用 Release 配置即可。