Dreamine.UI.Wpf.Controls 1.0.1
Dreamine.UI.Wpf.Controls 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
DreamineMessageBox.cs
이 파일의 문서화 페이지로 가기
1using System.Windows;
2
4{
13 public static class DreamineMessageBox
14 {
23 private static class State
24 {
33 private static bool _isOpen;
42 private static string? _lastTitle;
51 private static string? _lastMessage;
60 private static MessageBoxImage _lastIcon;
69 private static MessageBoxButton _lastButtons;
70
79 public static bool IsOpen
80 {
81 get => _isOpen;
82 set => _isOpen = value;
83 }
84
93 public static string? LastTitle
94 {
95 get => _lastTitle;
96 set => _lastTitle = value;
97 }
98
107 public static string? LastMessage
108 {
109 get => _lastMessage;
110 set => _lastMessage = value;
111 }
112
121 public static MessageBoxImage LastIcon
122 {
123 get => _lastIcon;
124 set => _lastIcon = value;
125 }
126
135 public static MessageBoxButton LastButtons
136 {
137 get => _lastButtons;
138 set => _lastButtons = value;
139 }
140
189 public static bool IsSame(string title, string message, MessageBoxImage icon, MessageBoxButton buttons) =>
190 IsOpen &&
191 LastTitle == title &&
192 LastMessage == message &&
193 LastIcon == icon &&
194 LastButtons == buttons;
195 }
196
221 private static Window? GetActiveWindow()
222 {
223 return Application.Current.Windows
224 .OfType<Window>()
225 .FirstOrDefault(w => w.IsActive);
226 }
227
236 private static object _lock = new object();
237
326 public static MessageBoxResult Show(
327 string message,
328 string title = "Information",
329 MessageBoxButton buttons = MessageBoxButton.OK,
330 MessageBoxImage icon = MessageBoxImage.None,
331 MessageBoxResult autoClick = MessageBoxResult.None, int autoClickDelaySeconds = 0, int enableDelaySeconds = 0)
332 {
333 return Application.Current.Dispatcher.Invoke(() =>
334 {
335 var msgBox = new DreamineMessageBoxWindow(title, message, icon, buttons, autoClick, autoClickDelaySeconds, enableDelaySeconds)
336 {
337 Owner = GetActiveWindow()
338 };
339 msgBox.ShowDialog();
340 return msgBox.Result;
341 });
342 }
343
432 public static void ShowAsync(string message, string title = "Information",
433 MessageBoxButton buttons = MessageBoxButton.OK,
434 MessageBoxImage icon = MessageBoxImage.None,
435 Action<MessageBoxResult>? callback = null,
436 MessageBoxResult autoClick = MessageBoxResult.None, int autoClickDelaySeconds = 0, int enableDelaySeconds = 0)
437 {
438 if (State.IsSame(title, message, icon, buttons))
439 return;
440
441 State.IsOpen = true;
442 State.LastTitle = title;
443 State.LastMessage = message;
444 State.LastIcon = icon;
445 State.LastButtons = buttons;
446
447 Application.Current.Dispatcher.BeginInvoke(() =>
448 {
449 try
450 {
451 var msgBox = new DreamineMessageBoxWindow(title, message, icon, buttons, autoClick, autoClickDelaySeconds, enableDelaySeconds)
452 {
453 Owner = GetActiveWindow()
454 };
455 msgBox.ShowDialog();
456 callback?.Invoke(msgBox.Result);
457 }
458 finally
459 {
460 State.IsOpen = false;
461 State.LastTitle = null;
462 State.LastMessage = null;
463 }
464 });
465 }
466 }
467}
static void ShowAsync(string message, string title="Information", MessageBoxButton buttons=MessageBoxButton.OK, MessageBoxImage icon=MessageBoxImage.None, Action< MessageBoxResult >? callback=null, MessageBoxResult autoClick=MessageBoxResult.None, int autoClickDelaySeconds=0, int enableDelaySeconds=0)
static MessageBoxResult Show(string message, string title="Information", MessageBoxButton buttons=MessageBoxButton.OK, MessageBoxImage icon=MessageBoxImage.None, MessageBoxResult autoClick=MessageBoxResult.None, int autoClickDelaySeconds=0, int enableDelaySeconds=0)
static bool IsSame(string title, string message, MessageBoxImage icon, MessageBoxButton buttons)