110 lines
3.8 KiB
C#
110 lines
3.8 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows;
|
|
using System.Windows.Interop;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
|
|
namespace XP.Common.GeneralForm.Views;
|
|
|
|
/// <summary>
|
|
/// 自定义消息框,可替代标准 MessageBox
|
|
/// </summary>
|
|
public partial class HexMessageBox : Window
|
|
{
|
|
public MessageBoxResult Result { get; set; }
|
|
|
|
public string MessageText
|
|
{
|
|
get => (string)GetValue(MessageTextProperty);
|
|
set => SetValue(MessageTextProperty, value);
|
|
}
|
|
|
|
public static readonly DependencyProperty MessageTextProperty =
|
|
DependencyProperty.Register("MessageText", typeof(string), typeof(HexMessageBox), new PropertyMetadata(""));
|
|
|
|
public new ImageSource Icon
|
|
{
|
|
get => (ImageSource)GetValue(IconProperty);
|
|
set => SetValue(IconProperty, value);
|
|
}
|
|
|
|
public new static readonly DependencyProperty IconProperty =
|
|
DependencyProperty.Register("Icon", typeof(ImageSource), typeof(HexMessageBox), new PropertyMetadata(null));
|
|
|
|
public MessageBoxButton MessageBoxButton
|
|
{
|
|
get => (MessageBoxButton)GetValue(MessageBoxButtonProperty);
|
|
set => SetValue(MessageBoxButtonProperty, value);
|
|
}
|
|
|
|
public static readonly DependencyProperty MessageBoxButtonProperty =
|
|
DependencyProperty.Register("MessageBoxButton", typeof(MessageBoxButton), typeof(HexMessageBox), new PropertyMetadata(MessageBoxButton.OK));
|
|
|
|
public HexMessageBox(string messageText, MessageBoxButton messageBoxButton, MessageBoxImage image)
|
|
{
|
|
InitializeComponent();
|
|
|
|
Left = (SystemParameters.PrimaryScreenWidth - Width) / 2;
|
|
Top = (SystemParameters.PrimaryScreenHeight - Height) / 2;
|
|
|
|
MessageText = messageText;
|
|
IntPtr iconHandle = SystemIcons.Information.Handle;
|
|
|
|
switch (image)
|
|
{
|
|
case MessageBoxImage.Error:
|
|
iconHandle = SystemIcons.Error.Handle;
|
|
break;
|
|
case MessageBoxImage.Question:
|
|
iconHandle = SystemIcons.Question.Handle;
|
|
break;
|
|
case MessageBoxImage.Warning:
|
|
iconHandle = SystemIcons.Warning.Handle;
|
|
break;
|
|
case MessageBoxImage.Information:
|
|
iconHandle = SystemIcons.Information.Handle;
|
|
break;
|
|
}
|
|
|
|
Icon = Imaging.CreateBitmapSourceFromHIcon(iconHandle, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
|
|
Icon.Freeze();
|
|
|
|
MessageBoxButton = messageBoxButton;
|
|
Result = MessageBoxResult.None;
|
|
Topmost = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 显示模态对话框并返回结果
|
|
/// </summary>
|
|
public static MessageBoxResult Show(string messageText, MessageBoxButton messageBoxButton, MessageBoxImage image)
|
|
{
|
|
return Application.Current.Dispatcher.Invoke(() =>
|
|
{
|
|
var window = new HexMessageBox(messageText, messageBoxButton, image);
|
|
window.ShowDialog();
|
|
return window.Result;
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 显示非模态消息
|
|
/// </summary>
|
|
public static HexMessageBox ShowMessage(string messageText, MessageBoxImage image)
|
|
{
|
|
HexMessageBox? messageBox = null;
|
|
Application.Current.Dispatcher.Invoke(() =>
|
|
{
|
|
messageBox = new HexMessageBox(messageText, MessageBoxButton.OK, image);
|
|
messageBox.Show();
|
|
});
|
|
return messageBox!;
|
|
}
|
|
|
|
private void Yes_Click(object sender, RoutedEventArgs e) { Result = MessageBoxResult.Yes; Close(); }
|
|
private void No_Click(object sender, RoutedEventArgs e) { Result = MessageBoxResult.No; Close(); }
|
|
private void OK_Click(object sender, RoutedEventArgs e) { Result = MessageBoxResult.OK; Close(); }
|
|
private void Cancel_Click(object sender, RoutedEventArgs e) { Result = MessageBoxResult.Cancel; Close(); }
|
|
}
|