Скрыть строку состояния в 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? Кроме того, у меня есть ссылка на мое приложение ссылка на приложение в магазин окон, но когда я ищу точное ключевое слово в магазине окон, мое приложение не отображается в магазине окон, но при нажатии на ссылку мое приложение появится в магазине окон.

Спасибо!


person ARH    schedule 16.12.2015    source источник


Ответы (5)


Проверка на 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();
    }
}
person Herdo    schedule 16.12.2015
comment
спасибо, я реализовал ваш код и буду следить за развертыванием в магазине Windows. - person ARH; 16.12.2015
comment
где вы вызываете эту функцию? В App.xaml.cs? или на реальных страницах, которые вы загружаете? - person erotavlas; 24.04.2016
comment
@erotavlas Зависит от вашего варианта использования. Если вы хотите скрыть строку состояния в течение всего срока службы приложения, вы должны вызвать ее в методе активации/приостановки. Если вы хотите скрыть строку состояния на определенной странице, вы должны скрыть ее во время обработчиков событий перехода к/от. - person Herdo; 24.04.2016
comment
Вам необходимо добавить REFERENCES расширения для настольных ПК и мобильных устройств Windows для UWP (это определяет переменную StatusBar). - person pollaris; 03.12.2017

Вы должны использовать FullName вместо ToString():

...
ApiInformation.IsTypePresent(typeof(StatusBar).FullName);
...
person Vitali    schedule 23.07.2016

Этот код не будет работать, потому что после компиляции .Net Native (которую делает Store) typeof(StatusBar).ToString() не вернет буквальное имя типа, как вы ожидаете, а вернет что-то вроде "EETypeRVA :0x00021968". Вместо этого используйте литеральную строку (вы ведь не собираетесь переименовывать StatusBar, верно? ;) или используйте IsApiContractPresent или typeof(StatusBar).FullName (как уже советовали). P.S. Та же проблема может быть воспроизведена без публикации, просто запустите ее с помощью конфигурации выпуска.

person sich    schedule 01.04.2017

Может быть, когда вы компилируете в Release и с помощью цепочки инструментов .NET Native, информация о типе отбрасывается, и поэтому вы не передаете строку, которую, по вашему мнению, передаете? Может быть, вы можете попробовать жестко закодировать полное имя типа?

person Pedro Pombeiro    schedule 05.08.2016

В Windows 10 используется команда Window.Current.SetTitleBar(null);

person Flack90    schedule 10.11.2016