MessageDialog breaks on Windows Phone 8.1 with 3 commands

Carson picture Carson · Jul 10, 2014 · Viewed 10.8k times · Source

I'm trying to add a MessageDialog to a windows phone 8.1 app (WinRT) with 3 commands. Looking at the documentation for MessageDialog:

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.popups.messagedialog.aspx

It says that "The dialog has a command bar that can support up to three commands", so I should think that wouldn't be a problem. I took their example (found on the documentation) and made a simple test app out of it, and it worked perfectly fine on both desktop and on windows phone. Then, I took the same example and added a single command to it:

var messageDialog = new MessageDialog("No internet connection has been found.");

// Add commands and set their callbacks; both buttons use the same callback function instead of inline event handlers
messageDialog.Commands.Add(new UICommand(
    "Try again",
    new UICommandInvokedHandler(this.CommandInvokedHandler)));
messageDialog.Commands.Add(new UICommand(
    "Something else",
    new UICommandInvokedHandler(this.CommandInvokedHandler)));
messageDialog.Commands.Add(new UICommand(
    "Close",
    new UICommandInvokedHandler(this.CommandInvokedHandler)));

// Set the command that will be invoked by default
messageDialog.DefaultCommandIndex = 0;

// Set the command to be invoked when escape is pressed
messageDialog.CancelCommandIndex = 1;

// Show the message dialog
await messageDialog.ShowAsync();

This works fine on a windows desktop app, but when I take the exact same code and try to use it for a windows phone app, it has no problem adding the 3rd command but when it gets to the await messageDialog.ShowAsync() line, it will crash with an unhandled exception. Interestingly, it does not crash in the same manner as a desktop app does when you add 4 commands. For that, it will throw the exception when you try to add the 4th command. On the phone, it won't have a problem with that, but it won't work when it tries to show the messageDialog.

Am I missing something, or does the maximum number of commands on a MessageDialog quietly get bumped down from 3 to 2 when you're on a phone?

Answer

user3344460 picture user3344460 · Aug 17, 2014

You can only use two commands for the following event Windows.UI.Popups.MessageDialog.

Here's an example..

private async void Button_Click(object sender, RoutedEventArgs e)
{
   //Message Box.
   MessageDialog msg = new MessageDialog("Here's the content/string.", "Hello!");

   //Commands
   msg.Commands.Add(new UICommand("Ok", new UICommandInvokedHandler(CommandHandlers)));
   msg.Commands.Add(new UICommand("Quit", new UICommandInvokedHandler(CommandHandlers)));

   await msg.ShowAsync();
   //end.
}

public void CommandHandlers(IUICommand commandLabel)
{
   var Actions = commandLabel.Label;
   switch (Actions)
   {
       //Okay Button.
       case "Ok" :
           MainpageName.Focus(Windows.UI.Xaml.FocusState.Pointer);
         break;
       //Quit Button.
       case "Quit" :
           Application.Current.Exit();
         break;
       //end.
   }
}