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)
−以上−