using System; using System.Linq; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Media.Imaging; namespace Dominion.NET_WPF { /// /// Interaction logic for wMessageBox.xaml /// public partial class wMessageBox : Window { [DllImport("gdi32.dll", SetLastError = true)] private static extern bool DeleteObject(IntPtr hObject); public wMessageBox() { InitializeComponent(); } public string Text { get { return tbBody.Text; } private set { tbBody.Text = value; } } private MessageBoxButton Button { set { switch (value) { case MessageBoxButton.OK: bNo.Visibility = Visibility.Collapsed; bCancel.Visibility = Visibility.Collapsed; break; case MessageBoxButton.OKCancel: bNo.Visibility = Visibility.Collapsed; break; case MessageBoxButton.YesNo: bOk.Text = "_Yes"; bCancel.Visibility = Visibility.Collapsed; break; case MessageBoxButton.YesNoCancel: bOk.Text = "_Yes"; break; } } } private System.Drawing.Bitmap ImageIcon { set { if (value == null) { iIcon.Visibility = Visibility.Collapsed; iIcon.Source = null; return; } var ip = value.GetHbitmap(); BitmapSource bs; try { bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); } finally { DeleteObject(ip); } iIcon.Visibility = Visibility.Visible; iIcon.Source = bs; } } public MessageBoxResult Result { get; private set; } = MessageBoxResult.None; public static MessageBoxResult Show(string body) { return _Show(null, body, string.Empty, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(string body, string caption) { return _Show(null, body, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(string body, string caption, MessageBoxButton button) { return _Show(null, body, caption, button, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(string body, string caption, MessageBoxButton button, MessageBoxImage icon) { return _Show(null, body, caption, button, icon, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(string body, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult) { return _Show(null, body, caption, button, icon, defaultResult, MessageBoxOptions.None); } public static MessageBoxResult Show(Window owner, string body) { return _Show(owner, body, string.Empty, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(Window owner, string body, string caption) { return _Show(owner, body, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(Window owner, string body, string caption, MessageBoxButton button) { return _Show(owner, body, caption, button, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(Window owner, string body, string caption, MessageBoxButton button, MessageBoxImage icon) { return _Show(owner, body, caption, button, icon, MessageBoxResult.None, MessageBoxOptions.None); } public static MessageBoxResult Show(Window owner, string body, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult) { return _Show(owner, body, caption, button, icon, defaultResult, MessageBoxOptions.None); } private static MessageBoxResult _Show(Window owner, string body, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, MessageBoxOptions options) { var mb = new wMessageBox { Text = body, Owner = owner ?? Application.Current.Windows.OfType().SingleOrDefault(x => x.IsActive), Title = caption, Button = button }; switch (icon) { case MessageBoxImage.Error: // & .Hand & .Stop mb.ImageIcon = System.Drawing.SystemIcons.Error.ToBitmap(); break; case MessageBoxImage.Exclamation: // & .Warning mb.ImageIcon = System.Drawing.SystemIcons.Exclamation.ToBitmap(); break; case MessageBoxImage.Information: // & .Asterisk mb.ImageIcon = System.Drawing.SystemIcons.Information.ToBitmap(); break; case MessageBoxImage.None: mb.ImageIcon = null; break; case MessageBoxImage.Question: mb.ImageIcon = System.Drawing.SystemIcons.Question.ToBitmap(); break; } return mb.ShowDialog() == true ? mb.Result : defaultResult; } private void bOk_Click(object sender, RoutedEventArgs e) { Result = bOk.Text == "_Yes" ? MessageBoxResult.Yes : MessageBoxResult.OK; DialogResult = true; Close(); } private void bNo_Click(object sender, RoutedEventArgs e) { Result = MessageBoxResult.No; DialogResult = true; Close(); } private void bCancel_Click(object sender, RoutedEventArgs e) { Result = MessageBoxResult.Cancel; DialogResult = true; Close(); } } }