Как вывести подтверждающее сообщение при выходе из UWP Xamarin Forms? - PullRequest
0 голосов
/ 28 августа 2018

Цель достижения:
- Запрос подтверждения сообщения « Подтверждение выхода? » с параметрами « Да » и « Отмена »

Я нашел способ достичь цели, описанной выше. Я пробовал следующий код:

Windows.UI.Core.Preview.SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += async (sender, args) =>
{
        args.Handled = true;
        var dialog = new MessageDialog("Are you confirm to exit?", "Exit");
        System.Diagnostics.Debug.WriteLine("CLOSE");            
};

приведенный выше код, который я написал в MainPage.xaml.cs , но мне кажется, что этот код не работает, я не вижу распечатки "ЗАКРЫТЬ" в отладочный вывод.

1 Ответ

0 голосов
/ 28 августа 2018

После небольшой копки я обнаружил, что подтверждение закрытия приложения на самом деле является ограниченной возможностью , которую вы должны объявить в манифесте приложения. Щелкните правой кнопкой мыши файл Package.appxmanifest в Solution Explorer и выберите Просмотреть код .

В открывшемся XML-файле сначала добавьте следующее пространство имен в корневой элемент Package:

xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"

А теперь найдите раздел Capabilities, в который вы добавляете возможность confirmAppClose:

<Capabilities>
   <Capability Name="internetClient" />
   <rescap:Capability Name="confirmAppClose" />
</Capabilities>

Также помните, что если вы хотите отобразить MessageDialog, вам придется использовать отсрочку, чтобы система ожидала завершения await, прежде чем проверять свойство Handled:

var deferral = e.GetDeferral();           
var dialog = new MessageDialog("Are you sure you want to exit?", "Exit");
var confirmCommand = new UICommand("Yes");
var cancelCommand = new UICommand("No");
dialog.Commands.Add( confirmCommand);            
dialog.Commands.Add(cancelCommand);
dialog.CancelCommandIndex = 1;
dialog.DefaultCommandIndex = 1;
if (await dialog.ShowAsync() == cancelCommand)
{
    //cancel close by handling the event
    e.Handled = true;                
}
deferral.Complete();

Преимущество этого подхода по сравнению с простым завершением приложения вручную и установкой события как Handled каждый раз в том, что в этом случае приложение сначала проходит через событие времени жизни приостановки, что позволяет сохранять любые несохраненные изменения, тогда как Например, Application.Terminate() будет означать немедленное «жесткое уничтожение» приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...