Диалоги и окна

Window — панель в рамке, которая, пока открыта, удерживает фокус клавиатуры и геймпада внутри себя: для внутриигрового меню или инвентаря. Dialog модален: он закрывает экран затемнённым фоном, не пропускает к элементам за собой мышь и касания и закрывается по Escape или кнопке B геймпада. MessageBox показывает готовый диалог с сообщением и кнопками и возвращает ответ игрока.
Разметка
<!-- A Window traps keyboard and gamepad focus while open; Dialog and MessageBox are shown from code (see the page). -->
<Window Width="300">
<StackPanel Orientation="Vertical" Padding="16">
<TextBlock Margin="0,0,0,12">Quit to the main menu?</TextBlock>
<StackPanel Orientation="Horizontal">
<Button Margin="0,0,8,0" Command="{Binding QuitCommand}">Quit</Button>
<Button>Cancel</Button>
</StackPanel>
</StackPanel>
</Window>
Окно добавляется на Canvas как любой элемент и рисуется только в открытом состоянии: вызовите Show(), чтобы открыть
его, и Close(), чтобы закрыть.
Для вопроса со стандартными ответами используйте окно сообщения из кода:
public static async Task<bool> ConfirmQuitAsync(Canvas canvas)
{
// Shows a modal message over the canvas and waits for the player's choice; Escape closes it with DialogResult.None.
DialogResult result = await MessageBox.ShowAsync(canvas, "Quit to the main menu?", DialogButtons.OKCancel);
return result == DialogResult.OK;
}
Основные свойства
| Свойство | Описание |
|---|---|
| IsOpen | Открыто ли окно. |
| Content | Что показывает окно или диалог. |
События и команды
Opened и Closed у окна, Closed
у диалога. Dialog<TResult> добавляет результат: его ShowAsync возвращает задачу, которая завершается
значением, с которым закрылся диалог.
Стиль
Тема по умолчанию даёт окнам тёмный фон и рамку. Шаблон диалога рисует затемнённый фон и размещает окно содержимого по центру.
Клавиатура, геймпад и сенсорный ввод
Пока окно или диалог открыты, Tab, стрелки и крестовина перемещают фокус только между их элементами, а после закрытия
фокус возвращается туда, где был. Escape или B закрывают диалог или окно сообщения (окно сообщения тогда возвращает
DialogResult.None).
Примечание
Окно не перехватывает мышь и касания: элементы за ним остаются доступными. Используйте диалог, если до ответа игрока больше ничем пользоваться нельзя.
Window
Не модально для указателя, модально для фокуса.
Dialog
Показывается вызовом Show(canvas) как оверлей поверх всего на Canvas.
MessageBox
ShowAsync(canvas, message, buttons) с DialogButtons.OK, OKCancel, YesNo или YesNoCancel, а также
ShowInputAsync(canvas, prompt) для строки текста.
См. также
- Кнопки — для действий диалога.