Monday, January 24, 2011

День первый. Продвинутый MessageBox: MessageBoxEx

Вступление

В Silverlight-проектах существует класс MessageBox для вывода системных сообщений. Его возможности существенно ограничены. А в XNA Framework есть похожий класс BeginShowMessageBox, обладающий гораздо большей функциональности. Попробуем взять класс из XNA Framework и внедрить его в свой Silverlight-проект.

Стандартный MessageBox

Для начала посмотрим, как работает стандартный MessageBox и разберем его недостатки.
Основные недостатки системного диалогового окна с сообщением:
Вызов окна сопровождается вибрацией (не отключается)
Вызов окна сопровождается звуком (не отключается)
Есть только два варианта кнопок (Одна кнопка OK или две кнопки OK и Cancel). Текст кнопок не редактируется

Стандартный вызов диалогового окна выглядит следующим образом.

private void butSimpleMessageBox_Click(object sender, RoutedEventArgs e)
{
  if(MessageBox.Show("Вы любите котов?", "Вопрос", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
  {
       textBlockAnswer.Text = "Я вас тоже люблю";
  }
  else
  {
      textBlockAnswer.Text = "Кто не любит котов — собаки";
  }
}

Продвинутый MessageBox

Как видите, диалоговое окно очень сильно ограничивает разработчика - самая главная беда: никак не поменять текст на кнопках. Но, оказывается в XNA Framework есть собственный класс Guide.BeginShowMessageBox, который лишен подобных недостатков. Класс позволяет задать одну или две кнопки и использовать свой текст для кнопок. А для отключения звука и вибрации нужно выбрать вариант MessageBoxIcon.None в параметре, который отвечает за вывод значка в окне с сообщением.
Чтобы использовать класс Guide.BeginShowMessageBox в Silverlight-проекте, нужно сначала установить ссылку на пространство имен Microsoft.Xna.Framework.GamerServices. Для удобства создадим новый класс-обертку MessageBoxEx, в котором будет выполняться вся работа.

Read more:  Alexsander Klimov