WPF 対応の MessageBox クラス

Last Updated 2012/09/11


WPF にも MessageBox クラスはありますが、ユーザーエクスペリエンスを忘れたのでしょうか、ずいぶん情けない外観になります。そこで、WPF 的に作ってみました。


下図の左は System.Windows.MessageBox クラスで、右は今回提案する WPF 対応の MessageBoxEx クラスです。

MessageBox2        MessageBoxEx

使い方は、System.Windows.MessageBox クラスとできるだけ同じにしましたが、Window クラスから派生しましたので、基本的な使い方は Window クラスと同じです。

メッセージを表示する部分は TextBlock クラスを使いましたので、TextBlock クラスの Inlines プロパティを設定することで上図のとおり、文字色を設定するなどが可能です。もちろん、単純なテキストでよければ、テキストのみの設定でいいです。また、ダイアログを開いたときに指定のボタンにフォーカスをあてることができます。

以下は、上図のメッセージボックスを表示するコードです。

private void button1_Click(object sender, RoutedEventArgs e)
{
  var dlg = new emanual.Wpf.Utility.MessageBoxEx();

  // 単なるテキストを設定する場合は Message プロパティを設定する
  //dlg.Message = "これはテスト用のメッセージです。";
  //dlg.Width = 350; // メッセージが短い場合はダイアログの幅を変更できる

  // Inlines プロパティを設定する場合
  dlg.TextBlock.Inlines.Add("メッセージの表示は TextBlock クラスを使っていますので、テキストの中に、");
  dlg.TextBlock.Inlines.Add(new System.Windows.Documents.Bold(new System.Windows.Documents.Run("ボールド体")));
  dlg.TextBlock.Inlines.Add("や ");
  dlg.TextBlock.Inlines.Add(new System.Windows.Documents.Italic(new System.Windows.Documents.Run("Italic")));
  dlg.TextBlock.Inlines.Add(" 体を織り交ぜることができます。");
  dlg.TextBlock.Inlines.Add("部分的に");
  var span = new System.Windows.Documents.Span(new System.Windows.Documents.Run("文字色"));
  span.Foreground = new SolidColorBrush(Colors.Red);
  dlg.TextBlock.Inlines.Add(span);
  dlg.TextBlock.Inlines.Add("を変えることも可能です。");

  // 現在のフォームの中央に表示する場合
  //dlg.Owner = this;
  //dlg.WindowStartupLocation = WindowStartupLocation.CenterOwner;

  // ダイアログの表示位置を現在のフォームを基準にして、少し右下に表示する場合
  dlg.Left = this.Left + 50;
  dlg.Top = this.Top + 50;

  // デフォルトでは薄い水色のグラデーションですが、好みの色に指定可能
  //dlg.Background = Brushes.Wheat;
  dlg.Button = MessageBoxButton.YesNoCancel;
  dlg.Image = MessageBoxImage.Warning;

  // ダイアログを開いたときにフォーカスをあてるボタン
  dlg.Result = MessageBoxResult.No;
  dlg.ShowDialog();

  MessageBoxResult result = dlg.Result;
}

以下は、プロジェクトのソースです。フリーウエアですからご自由にお使いください。ソースの改変・流用も自由です。

MessageBoxEx.zip (27,201 bytes)

−以上−