MyTetra Share
Делитесь знаниями!
Создание диалогового окна
Время создания: 04.09.2019 18:55
Текстовые метки: WPF, создание окон, c#
Раздел: Компьютер - C# - WPF
Запись: Kozlov-AE/Tetra/master/base/1565809440nduyog1p93/text.html на raw.githubusercontent.com

WPF поддерживает возможность создания модальных диалоговых окон. При вызове модальное окно блокирует доступ к родительскому окну, пока пользователь не закроет модальное окно.

Для работы добавим в проект новое окно, которое назовем PasswordWindow. Это окно будет выполнять роль модального.

Изменим интерфейс PasswordWindow:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<Window x:Class="WindowApp.PasswordWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WindowApp"

        mc:Ignorable="d"

        Title="Авторизация" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterScreen">

    <Grid Margin="10">

        <Grid.RowDefinitions>

            <RowDefinition Height="20" />

            <RowDefinition Height="20" />

            <RowDefinition Height="Auto" />

        </Grid.RowDefinitions>

 

        <TextBlock>Введите пароль:</TextBlock>

        <TextBox Name="passwordBox" Grid.Row="1" MinWidth="250">Пароль</TextBox>

 

        <WrapPanel Grid.Row="2" HorizontalAlignment="Right" Margin="0,15,0,0">

            <Button IsDefault="True" Click="Accept_Click" MinWidth="60" Margin="0,0,10,0">OK</Button>

            <Button IsCancel="True" MinWidth="60">Отмена</Button>

        </WrapPanel>

 

    </Grid>

</Window>


Здесь определено текстовое поле для ввода пароля и две кнопки. Вторая кнопка с атрибутом IsCancel="True" будет выполнять роль отмены. А первая кнопка будет подтверждать ввод.

Для подтверждения ввода и успешного выхода из модального окна определим в файле кода PasswordWindow определим обработчик первой кнопки Accept_Click:



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

using System.Windows;

 

namespace WindowApp

{

    public partial class PasswordWindow : Window

    {

        public PasswordWindow()

        {

            InitializeComponent();

        }

 

        private void Accept_Click(object sender, RoutedEventArgs e)

        {

            this.DialogResult = true;

        }

 

        public string Password

        {

            get { return passwordBox.Text; }

        }

 

    }

}


Для успешного выхода из модального диалогового окна нам надо для свойства DialogResult установить значение true. Для второй кнопки необязательно определять обработчик, так как у нее установлен атрибут IsCancel="True", следовательно, ее нажатие будет эквивалентно результату this.DialogResult = false;. Этот же результат будет при закрытии диалогового окна на крестик.

Кроме того, здесь определяется свойство Password, через которое мы можем извне получить введенный пароль.

И изменим главную форму MainWindow, чтобы из нее запускать диалоговое окно. Во-первых, определим кнопку:


1

2

3

4

5

6

7

8

9

10

11

12

<Window x:Class="WindowApp.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:WindowApp"

        mc:Ignorable="d"

        Title="MainWindow" Height="250" Width="300">

    <Grid>

        <Button Width="100" Height="30" Content="Авторизация" Click="Login_Click" />

    </Grid>

</Window>


И определим обработчик для этой кнопки:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

private void Login_Click(object sender, RoutedEventArgs e)

{

    PasswordWindow passwordWindow = new PasswordWindow();

 

    if(passwordWindow.ShowDialog()==true)

    {

        if(passwordWindow.Password=="12345678")

            MessageBox.Show("Авторизация пройдена");

        else

            MessageBox.Show("Неверный пароль");

    }

    else

    {

        MessageBox.Show("Авторизация не пройдена");

    }

}

В итоге при нажатии на кнопку будет отображаться следующее диалоговое окно:

И в зависимости от результатов ввода будет отображаться то или иное сообщение.

 
MyTetra Share v.0.59
Яндекс индекс цитирования