2011-01-03 2 views
7

Мне нужен MessageBox.Show(), но с расширенной функциональностью: встроенный ящик сообщений для Windows Phone 7 не будет отображать произвольные кнопки, просто ОК или отменить, мне нужно, например Да Нет. Мне нужен метод Show, который будет возвращаться только тогда, когда пользователь нажимает кнопку. Я попытался сделать свой собственный почтовый ящик всплывающим. Проблема в том, что она является асинхронной, как и все в пользовательском интерфейсе в WP7, и я не могу блокировать UI-поток, потому что пользовательский интерфейс отвечает за обработку событий нажатия кнопок. Я видел пример ChildWindow для WP7, но это также было асинхронным, у меня должен быть метод Show(), который возвращается только тогда, когда пользователь нажимает. Какие-либо предложения? Какой-то DoEvents() может мне очень помочь, но в WP7 такого метода нет :(MessageBox.Show для Windows Phone 7

ответ

6

Вы можете использовать XNA-х Guide.BeginShowMessageBox() для отображения MessageBox с помощью пользовательских кнопок. Here's учебник о том, как использовать его.

Обратите внимание, что параметр MessageBoxIcon не выбирает значок на WP7, вместо этого он выбирает n otification, когда отображается окно сообщения.

EDIT: Упс, не прочитал ваши синхронные требования, прежде чем я разместил их. Возможно, вы можете установить флаг, чтобы остановить все, что вы хотите предотвратить, и сбросить его, как только пользователь сделал выбор.

+0

Да, но самой большой проблемой является то, что я должен использовать метод, который возвращается только при нажатии кнопки. Я могу использовать, например, таймер, чтобы подождать, пока щелкните событие события и продолжите программу в обработчике события тайм-аута, если условие выполнено, но я не могу понять, как реализовать это в одном методе :( – Vic

+0

Я пробовал и работает !!! :): – Vic

+0

AutoResetEvent waitHandle = new AutoResetEvent (false); Guide.BeginShowMessageBox («Версия Windows», «Выберите версию Windows», новый список {«Vista», «Семь»}, 0, MessageBoxIcon.Error, asyncResult => { int ? return = Guide.EndShowMessageBox (asyncResult); waitHandle.Set(); }, null); waitHandle.WaitOne(); это не блокирует поток пользовательского интерфейса! Thanx :) – Vic

2

Я нашел это, когда искал что-то подобное, но оказался только с помощью встроенного в него почтового ящика. Это, безусловно, даст вам возможность иметь пользовательские кнопки.

Windows Phone 7 Custom Message Box

+0

Благодарим вас за ответ, но часть Show() не удовлетворена в этом решении, только часть произвольных кнопок; если я изменяю это: NotificationBox.Show («Выход», «Вы уверены?», новый NotificationBoxCommand («Да»,() => {}), новый NotificationBoxCommand («Нет»,() => {})); : AutoResetEvent waitHandle = новый AutoResetEvent (false); NotificationBox.Show («Выход», «Вы уверены?», новый NotificationBoxCommand («Да»,() => {waitHandle.Set();}), новый NotificationBoxCommand («Нет»,() => {waitHandle.Set();})); waitHandle.WaitOne(); ... тогда я получаю тупик, это моя проблема :( – Vic

1

Используйте холст, на котором есть все, что вы хотите. Затем просто используйте свойство видимости, чтобы открыть его.