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();
}
}
}