TOC

This article has been localized into Chinese by the community.

对话框:

消息框

WPF为您的应用程序提供了几个对话框,但最简单的就是MessageBox。其唯一目的是向用户显示消息,然后为用户提供一种或多种方式来响应消息。

通过调用静态Show()方法来使用MessageBox,该方法可以采用一系列不同的参数,以便能够以您希望的方式查看和操作。我们将在本文中介绍所有各种形式,每个变体由MessageBox.Show()行和结果的屏幕截图表示。在本文的最后,您可以找到一个完整的示例,可以让您测试所有变体。

在最简单的形式中,MessageBox只接受一个参数,即要显示的消息:

MessageBox.Show("Hello, world!");

带有标题的MessageBox

上面的例子可能有点过于简单--如果在窗口上显示消息的标题可能会有所帮助。幸运的是,第二个可选参数允许我们指定标题:

MessageBox.Show("Hello, world!", "My App");

带有额外按钮的MessageBox

默认情况下,MessageBox只有一个Ok按钮,但是如果您想要询问用户问题而不仅仅是显示一条信息,则可以更改。另请注意我如何使用换行符 (\n)在此消息中使用多行:

MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);

您可以使用MessageBoxButton枚举中的值来控制显示哪些按钮 - 在这种情况下,包含Yes,No和Cancel按钮。可以使用以下值,这些值应该是不言自明的:

  • OK
  • OKCancel
  • YesNo
  • YesNo

现在有了多种选择,您需要一种方法来查看用户选择的内容,幸运的是,MessageBox.Show()方法始终返回您可以使用的MessageBoxResult枚举中的值。这是一个例子:

MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
	case MessageBoxResult.Yes:
		MessageBox.Show("Hello to you too!", "My App");
		break;
	case MessageBoxResult.No:
		MessageBox.Show("Oh well, too bad!", "My App");
		break;
	case MessageBoxResult.Cancel:
		MessageBox.Show("Nevermind then...", "My App");
		break;
}

通过检查MessageBox.Show()方法的结果值,您现在可以对用户选择做出反应,如代码示例和屏幕截图所示。

带有图标的MessageBox

MessageBox可以使用第四个参数在文本消息的左侧显示预定义的图标:

MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);

使用MessageBoxImage枚举,您可以在不同情况下的一系列图标之间进行选择。这是完整的清单:

  • Asterisk
  • Error
  • Exclamation
  • Hand
  • Information
  • None
  • Question
  • Stop
  • Warning

这些名称应该说明它们的外观,但可以随意尝试各种值,或者查看这篇MSDN文章,其中每个值都有解释,甚至说明: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx

MessageBox指定缺省按钮

MessageBox将选择一个按钮作为默认选项,然后调用该按钮,以防用户在显示对话框后按Enter键。例如,如果您显示带有“是”和“否”按钮的MessageBox,则“是”将是默认答案。您可以使用第五个参数更改此行为到MessageBox.Show()方法,但:

MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);

请注意屏幕截图中“否”按钮略微抬高,以便直观地指示它已被选中,并且如果按下EnterSpace按钮将调用它。

完整的例子

正如所承诺的,这是本文中使用的完整示例:

<Window x:Class="WpfTutorialSamples.Dialogs.MessageBoxSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MessageBoxSample" Height="250" Width="300">
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
        <StackPanel.Resources>
            <Style TargetType="Button">
                <Setter Property="Margin" Value="0,0,0,10" />
            </Style>
        </StackPanel.Resources>
        <Button Name="btnSimpleMessageBox" Click="btnSimpleMessageBox_Click">Simple MessageBox</Button>
        <Button Name="btnMessageBoxWithTitle" Click="btnMessageBoxWithTitle_Click">MessageBox with title</Button>
        <Button Name="btnMessageBoxWithButtons" Click="btnMessageBoxWithButtons_Click">MessageBox with buttons</Button>
        <Button Name="btnMessageBoxWithResponse" Click="btnMessageBoxWithResponse_Click">MessageBox with response</Button>
        <Button Name="btnMessageBoxWithIcon" Click="btnMessageBoxWithIcon_Click">MessageBox with icon</Button>
        <Button Name="btnMessageBoxWithDefaultChoice" Click="btnMessageBoxWithDefaultChoice_Click">MessageBox with default choice</Button>
    </StackPanel>
</Window>
using System;
using System.Windows;

namespace WpfTutorialSamples.Dialogs
{
	public partial class MessageBoxSample : Window
	{
		public MessageBoxSample()
		{
			InitializeComponent();
		}

		private void btnSimpleMessageBox_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("Hello, world!");
		}

		private void btnMessageBoxWithTitle_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("Hello, world!", "My App");
		}

		private void btnMessageBoxWithButtons_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
		}

		private void btnMessageBoxWithResponse_Click(object sender, RoutedEventArgs e)
		{
			MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
			switch(result)
			{
				case MessageBoxResult.Yes:
					MessageBox.Show("Hello to you too!", "My App");
					break;
				case MessageBoxResult.No:
					MessageBox.Show("Oh well, too bad!", "My App");
					break;
				case MessageBoxResult.Cancel:
					MessageBox.Show("Nevermind then...", "My App");
					break;
			}
		}

		private void btnMessageBoxWithIcon_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
		}

		private void btnMessageBoxWithDefaultChoice_Click(object sender, RoutedEventArgs e)
		{
			MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
		}
	}
}

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!