2015-01-02 2 views
0

Мне было интересно, есть ли способ показать сообщение в WP8 только один раз, когда откроется приложение.MessageBox Display Once

У меня есть следующий код уже, очень простой.

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    MessageBox.Show("Hi"); 
} 

Однако это отображается каждый раз, когда приложение открыто. Я только хочу, чтобы он показывался в первый раз.

Возможно ли это?

+0

Вы могли бы запомнить в bool, если вы уже указали окно с сообщениями. ИЛИ используйте событие Loaded, которое происходит, когда вы добавляете объект в визуальное дерево. –

ответ

0

Я успешно использовал это приложение в приложениях WP 8.0 Silverlight. Создать многоразовый класс, OneTimeDialog:

using System.Windows; 
using System.IO.IsolatedStorage; 

namespace MyApp 
{ 
    public static class OneTimeDialog 
    { 
     private static readonly IsolatedStorageSettings _settings = IsolatedStorageSettings.ApplicationSettings; 

     public static void Show(string uniqueKey, string title, string message) 
     { 
      if (_settings.Contains(uniqueKey)) return; 

      MessageBox.Show(message, title, MessageBoxButton.OK); 

      _settings.Add(uniqueKey, true); 
      _settings.Save(); 
     } 
    } 
} 

Затем использовать его в любом месте в вашем приложении, например:

OneTimeDialog.Show("WelcomeDialog", "Welcome", "Welcome to my app! You'll only see this once.") 

Показ «Подсказка» или «Добро пожаловать» диалог только один раз полезно в большом количестве различного типы приложений, поэтому на самом деле у меня есть код выше в Portable Class Library, поэтому я могу ссылаться на него из нескольких проектов.

+0

Спасибо, Брэд, работал с удовольствием! –

+0

Есть ли способ форматировать макет текста в поле, то есть пункты/маркеры и т. Д.? –

+0

Не так, как вы это делаете сейчас, но посмотрите на класс CustomMessageBox в этом пакете nuget: https://www.nuget.org/packages/WPtoolkit. Он предлагает намного больше возможностей, и я не удивлюсь, если он сможет поддержать это поведение. – Brad

1

Поскольку вам нужно сохранить состояние через сеансы, пара ключ-значение isolated storage является хорошим выбором. Просто проверьте, прежде чем, а затем обновите:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    var settings = IsolatedStorageSettings.ApplicationSettings; 
    if (settings.ContainsKey("messageShown") && (bool)settings["messageShown"] == true)  
    { 
    MessageBox.Show("Hi"); 
    settings["messageShown"] = true; 
    } 
} 
+0

Спасибо за помощь. Однако я попытался использовать этот код, ContainsKey возвращает следующую ошибку: «System.IO.IsolatedStorage.IsolatedStorageSettings» не содержит определения для «ContainsKey» и никакого метода расширения «ContainsKey», принимающего первый аргумент типа «System.IO.IsolatedStorage .IsolatedStorageSettings "(вы не указали директиву использования или ссылку на сборку?) –

+0

Я попытался использовать только« Содержит », код запускается, но окно сообщения не отображается. –

+0

Если это помогает, я использую приложение Silverlight WP8.0. –