Last Updated 2012/09/11
WPF にも MessageBox クラスはありますが、ユーザーエクスペリエンスを忘れたのでしょうか、ずいぶん情けない外観になります。そこで、WPF 的に作ってみました。
下図の左は System.Windows.MessageBox クラスで、右は今回提案する WPF 対応の 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)
−以上−