📜  wpf 显示消息框 (1)

📅  最后修改于: 2023-12-03 15:21:15.905000             🧑  作者: Mango

WPF 显示消息框

在 WPF 应用程序中,我们经常需要弹出消息框来向用户显示信息,并进一步让用户做出相应的决定。消息框其实是一个对话框,可能包含文本、图标、按钮等,其中最常用的消息框类型是确认框和警告框。

在 C# 中,我们可以使用 MessageBox 类来创建消息框,而 WPF 中显示消息框有以下三种常见方式:

1. 使用 MessageBox 类

使用 MessageBox 类创建消息框非常简单和直接,只需指定消息框的文本、标题、按钮类型和图标类型即可。以下是创建一种确认框的示例代码:

MessageBoxResult result = MessageBox.Show("确定删除此项吗?", "确认删除", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
    // 删除代码
}

其中参数分别为消息文本、标题、按钮类型和图标类型。可以根据实际需要更改参数,按钮类型包含 YesNo、OK等,图标类型包含 Question、Information、Warning、Error等。

MessageBox.Show() 的返回值是一个 MessageBoxResult 枚举类型,用来表示用户点击的按钮。在示例代码中,如果用户点击 Yes 按钮,则进行删除操作。

2. 使用自定义对话框

如果需要更多的自定义功能和样式,可以使用自定义对话框。自定义对话框是一个 WPF 控件,可以根据需要添加控件、布局和样式。以下是创建自定义确认框的示例代码:

<Window x:Class="WpfApp1.CustomMessageBox"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="确认删除" Height="150" Width="350">
    <Grid>
        <TextBlock Text="确定删除此项吗?" VerticalAlignment="Center" HorizontalAlignment="Center" />
        <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="10">
            <Button Content="Yes" Margin="0,0,10,0" Width="75" IsDefault="True" Click="Yes_Click"/>
            <Button Content="No" Margin="0,0,10,0" Width="75" IsCancel="True" Click="No_Click"/>
        </StackPanel>
    </Grid>
</Window>

在代码中,我们创建了一个 Window 控件,其中包含一个 TextBlock 和两个 Button 控件,分别用于 Yes 和 No 按钮。在 C# 中,可以使用 ShowDialog() 方法显示自定义对话框,以下是示例代码:

CustomMessageBox customMessageBox = new CustomMessageBox();
customMessageBox.ShowDialog();

当用户点击 Yes 按钮时,会触发 Yes_Click() 的事件,以下是样例代码:

private void Yes_Click(object sender, RoutedEventArgs e)
{
    DialogResult = true;
    Close();
}

这段代码会将 DialogResult 设置为 true,并关闭自定义对话框。

3. 使用 MaterialDesignThemes 控件库

MaterialDesignThemes 是一个 WPF 控件库,可以帮助我们在 WPF 应用程序中添加 Material Design 风格的控件和样式。该库还包括一个 DialogHost 控件,可以方便地显示弹出框和消息框。

以下是使用 DialogHost 控件显示消息框的样例代码:

<Window x:Class="WpfApp1.DialogHostMessageDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        Title="DialogHostMessageDemo" Height="200" Width="350">
    <Grid>
        <materialDesign:DialogHost x:Name="dialogHost" Margin="10">
            <StackPanel VerticalAlignment="Center">
                <TextBlock Text="确定删除此项吗?" VerticalAlignment="Center" HorizontalAlignment="Center" />
                <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Right" Margin="10">
                    <Button Content="Yes" Margin="0,0,10,0" Width="75" IsDefault="True" Click="Yes_Click"/>
                    <Button Content="No" Margin="0,0,10,0" Width="75" IsCancel="True" Click="No_Click"/>
                </StackPanel>
            </StackPanel>
        </materialDesign:DialogHost>
    </Grid>
</Window>

在代码中,我们创建了一个 DialogHost 控件,其中包含了和自定义对话框相同的控件和样式。在 C# 中,可以使用 Show() 方法显示对话框,以下是代码示例:

await dialogHost.ShowDialog(new DialogMessage("确认删除", "确定删除此项吗?", callback));

这段代码会创建一个 DialogMessage 实例,并将其传递给 ShowDialog() 方法。callback 参数表示当用户点击 Yes 或 No 按钮时的回调函数。

以上三种方式都可以用来显示消息框,可以根据实际需求选择使用。