Мне нужен MessageBox.Show(), но с расширенной функциональностью: встроенный ящик сообщений для Windows Phone 7 не будет отображать произвольные кнопки, просто ОК или отменить, мне нужно, например Да Нет. Мне нужен метод Show, который будет возвращаться только тогда, когда пользователь нажимает кнопку. Я попытался сделать свой собственный почтовый ящик всплывающим. Проблема в том, что она является асинхронной, как и все в пользовательском интерфейсе в WP7, и я не могу блокировать UI-поток, потому что пользовательский интерфейс отвечает за обработку событий нажатия кнопок. Я видел пример ChildWindow для WP7, но это также было асинхронным, у меня должен быть метод Show(), который возвращается только тогда, когда пользователь нажимает. Какие-либо предложения? Какой-то DoEvents() может мне очень помочь, но в WP7 такого метода нет :(MessageBox.Show для Windows Phone 7
ответ
Вы можете использовать XNA-х Guide.BeginShowMessageBox() для отображения MessageBox с помощью пользовательских кнопок. Here's учебник о том, как использовать его.
Обратите внимание, что параметр MessageBoxIcon не выбирает значок на WP7, вместо этого он выбирает n otification, когда отображается окно сообщения.
EDIT: Упс, не прочитал ваши синхронные требования, прежде чем я разместил их. Возможно, вы можете установить флаг, чтобы остановить все, что вы хотите предотвратить, и сбросить его, как только пользователь сделал выбор.
Я нашел это, когда искал что-то подобное, но оказался только с помощью встроенного в него почтового ящика. Это, безусловно, даст вам возможность иметь пользовательские кнопки.
Благодарим вас за ответ, но часть Show() не удовлетворена в этом решении, только часть произвольных кнопок; если я изменяю это: NotificationBox.Show («Выход», «Вы уверены?», новый NotificationBoxCommand («Да»,() => {}), новый NotificationBoxCommand («Нет»,() => {})); : AutoResetEvent waitHandle = новый AutoResetEvent (false); NotificationBox.Show («Выход», «Вы уверены?», новый NotificationBoxCommand («Да»,() => {waitHandle.Set();}), новый NotificationBoxCommand («Нет»,() => {waitHandle.Set();})); waitHandle.WaitOne(); ... тогда я получаю тупик, это моя проблема :( – Vic
Используйте холст, на котором есть все, что вы хотите. Затем просто используйте свойство видимости, чтобы открыть его.
- 1. Граница для Windows Phone 7
- 2. Windows 7 PHone - KeyNotFoundException
- 3. XAML для Windows Phone 7
- 4. Windows Phone Mango vs Windows Phone 7
- 5. Медиаплеер в Windows Phone 7
- 6. NullReferenceException для TimePicker Windows Phone 7
- 7. SqlCeException в Windows Phone 7
- 8. Разработка Windows 7 phone
- 9. Windows Phone 7 Образцы
- 10. Windows Phone 7 SDK
- 11. Windows phone 7 Реклама
- 12. Развертывание Windows Phone 7
- 13. WIndows Phone 7, PhoneGap
- 14. WCF + Windows Phone 7
- 15. Windows Phone 7 sniffer
- 16. Windows Phone 7 Настройки
- 17. Windows Phone 7 buttons
- 18. Azure + Windows phone 7
- 19. Windows phone 7 app
- 20. Windows Phone 7 Crash
- 21. Windows Phone 7 Разработка
- 22. Windows Phone 7 States
- 23. Windows Phone 7 - Деактивация?
- 24. Windows Phone 7 анимация
- 25. windows phone 7 database
- 26. Windows Phone 7 - WebBrowserTask
- 27. XmlConvert.ToDateTime Windows Phone 7
- 28. Разработчик Windows Phone 7
- 29. Parsing JSON объект с Windows Phone 7
- 30. Windows Phone 7 Список не обновляется
Да, но самой большой проблемой является то, что я должен использовать метод, который возвращается только при нажатии кнопки. Я могу использовать, например, таймер, чтобы подождать, пока щелкните событие события и продолжите программу в обработчике события тайм-аута, если условие выполнено, но я не могу понять, как реализовать это в одном методе :( – Vic
Я пробовал и работает !!! :): – Vic
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