MessageBox.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657
  1. using System;
  2. using System.ComponentModel;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Media;
  5. using System.Text;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using HandyControl.Data;
  11. using HandyControl.Interactivity;
  12. using HandyControl.Properties.Langs;
  13. using HandyControl.Tools;
  14. using HandyControl.Tools.Interop;
  15. namespace HandyControl.Controls;
  16. /// <summary>
  17. /// 消息框
  18. /// </summary>
  19. [SuppressMessage("ReSharper", "RedundantDelegateCreation")]
  20. [TemplatePart(Name = ElementPanel, Type = typeof(Panel))]
  21. [TemplatePart(Name = ElementButtonClose, Type = typeof(Button))]
  22. public sealed class MessageBox : Window
  23. {
  24. private const string ElementPanel = "PART_Panel";
  25. private const string ElementButtonClose = "PART_ButtonClose";
  26. private Button _buttonClose;
  27. private Panel _panel;
  28. private MessageBoxResult _messageBoxResult = MessageBoxResult.Cancel;
  29. private Button _buttonOk;
  30. private Button _buttonCancel;
  31. private Button _buttonYes;
  32. private Button _buttonNo;
  33. private bool _showOk;
  34. private bool _showCancel;
  35. private bool _showYes;
  36. private bool _showNo;
  37. private IntPtr _lastActiveWindowIntPtr;
  38. public static readonly DependencyProperty MessageProperty = DependencyProperty.Register(
  39. nameof(Message), typeof(string), typeof(MessageBox), new PropertyMetadata(default(string)));
  40. public string Message
  41. {
  42. get => (string) GetValue(MessageProperty);
  43. set => SetValue(MessageProperty, value);
  44. }
  45. public static readonly DependencyProperty ImageProperty = DependencyProperty.Register(
  46. nameof(Image), typeof(Geometry), typeof(MessageBox), new PropertyMetadata(default(Geometry)));
  47. public Geometry Image
  48. {
  49. get => (Geometry) GetValue(ImageProperty);
  50. set => SetValue(ImageProperty, value);
  51. }
  52. public static readonly DependencyProperty ImageBrushProperty = DependencyProperty.Register(
  53. nameof(ImageBrush), typeof(Brush), typeof(MessageBox), new PropertyMetadata(default(Brush)));
  54. public Brush ImageBrush
  55. {
  56. get => (Brush) GetValue(ImageBrushProperty);
  57. set => SetValue(ImageBrushProperty, value);
  58. }
  59. public static readonly DependencyProperty ShowImageProperty = DependencyProperty.Register(
  60. nameof(ShowImage), typeof(bool), typeof(MessageBox), new PropertyMetadata(ValueBoxes.FalseBox));
  61. public bool ShowImage
  62. {
  63. get => (bool) GetValue(ShowImageProperty);
  64. set => SetValue(ShowImageProperty, ValueBoxes.BooleanBox(value));
  65. }
  66. private MessageBox()
  67. {
  68. CommandBindings.Add(new CommandBinding(ControlCommands.Confirm, (s, e) =>
  69. {
  70. _messageBoxResult = MessageBoxResult.OK;
  71. Close();
  72. }, (s, e) => e.CanExecute = _showOk));
  73. CommandBindings.Add(new CommandBinding(ControlCommands.Cancel, (s, e) =>
  74. {
  75. _messageBoxResult = MessageBoxResult.Cancel;
  76. Close();
  77. }, (s, e) => e.CanExecute = _showCancel));
  78. CommandBindings.Add(new CommandBinding(ControlCommands.Yes, (s, e) =>
  79. {
  80. _messageBoxResult = MessageBoxResult.Yes;
  81. Close();
  82. }, (s, e) => e.CanExecute = _showYes));
  83. CommandBindings.Add(new CommandBinding(ControlCommands.No, (s, e) =>
  84. {
  85. _messageBoxResult = MessageBoxResult.No;
  86. Close();
  87. }, (s, e) => e.CanExecute = _showNo));
  88. }
  89. protected override void OnSourceInitialized(EventArgs e)
  90. {
  91. if (_showYes && !_showCancel)
  92. {
  93. var hMenu = InteropMethods.GetSystemMenu(this.GetHandle(), false);
  94. if (hMenu != IntPtr.Zero)
  95. {
  96. InteropMethods.EnableMenuItem(hMenu, InteropValues.SC_CLOSE, InteropValues.MF_BYCOMMAND | InteropValues.MF_GRAYED);
  97. }
  98. if (_buttonClose != null)
  99. {
  100. _buttonClose.IsEnabled = false;
  101. }
  102. }
  103. base.OnSourceInitialized(e);
  104. _lastActiveWindowIntPtr = InteropMethods.GetForegroundWindow();
  105. Activate();
  106. }
  107. protected override void OnClosed(EventArgs e)
  108. {
  109. InteropMethods.SetForegroundWindow(_lastActiveWindowIntPtr);
  110. base.OnClosed(e);
  111. }
  112. public override void OnApplyTemplate()
  113. {
  114. base.OnApplyTemplate();
  115. _panel = GetTemplateChild(ElementPanel) as Panel;
  116. if (_panel != null)
  117. {
  118. if (_buttonOk != null)
  119. {
  120. _panel.Children.Add(_buttonOk);
  121. }
  122. if (_buttonYes != null)
  123. {
  124. _panel.Children.Add(_buttonYes);
  125. }
  126. if (_buttonNo != null)
  127. {
  128. _panel.Children.Add(_buttonNo);
  129. }
  130. if (_buttonCancel != null)
  131. {
  132. _panel.Children.Add(_buttonCancel);
  133. }
  134. }
  135. _buttonClose = GetTemplateChild(ElementButtonClose) as Button;
  136. if (_buttonClose != null)
  137. {
  138. _buttonClose.Click += ButtonClose_Click;
  139. }
  140. }
  141. private void ButtonClose_Click(object sender, RoutedEventArgs e) => Close();
  142. protected override void OnPreviewKeyDown(KeyEventArgs e)
  143. {
  144. if (e.Key == Key.System && e.SystemKey == Key.F4)
  145. {
  146. e.Handled = true;
  147. return;
  148. }
  149. if (e.KeyboardDevice.Modifiers == ModifierKeys.Control && e.Key == Key.C)
  150. {
  151. var builder = new StringBuilder();
  152. var line = new string('-', 27);
  153. builder.Append(line);
  154. builder.Append(Environment.NewLine);
  155. builder.Append(Title);
  156. builder.Append(Environment.NewLine);
  157. builder.Append(line);
  158. builder.Append(Environment.NewLine);
  159. builder.Append(Message);
  160. builder.Append(Environment.NewLine);
  161. builder.Append(line);
  162. builder.Append(Environment.NewLine);
  163. if (_showOk)
  164. {
  165. builder.Append(Lang.Confirm);
  166. builder.Append(" ");
  167. }
  168. if (_showYes)
  169. {
  170. builder.Append(Lang.Yes);
  171. builder.Append(" ");
  172. }
  173. if (_showNo)
  174. {
  175. builder.Append(Lang.No);
  176. builder.Append(" ");
  177. }
  178. if (_showCancel)
  179. {
  180. builder.Append(Lang.Cancel);
  181. builder.Append(" ");
  182. }
  183. builder.Append(Environment.NewLine);
  184. builder.Append(line);
  185. builder.Append(Environment.NewLine);
  186. try
  187. {
  188. Clipboard.SetDataObject(builder.ToString());
  189. }
  190. catch
  191. {
  192. // ignored
  193. }
  194. }
  195. }
  196. /// <summary>
  197. /// 成功
  198. /// </summary>
  199. /// <param name="messageBoxText"></param>
  200. /// <param name="caption"></param>
  201. public static MessageBoxResult Success(string messageBoxText, string caption = null)
  202. {
  203. MessageBox messageBox = null;
  204. Application.Current.Dispatcher.Invoke(new Action(() =>
  205. {
  206. messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK);
  207. SetButtonStatus(messageBox, MessageBoxButton.OK, MessageBoxResult.OK);
  208. messageBox.ShowImage = true;
  209. messageBox.Image = ResourceHelper.GetResourceInternal<Geometry>(ResourceToken.SuccessGeometry);
  210. messageBox.ImageBrush = ResourceHelper.GetResourceInternal<Brush>(ResourceToken.SuccessBrush);
  211. SystemSounds.Asterisk.Play();
  212. messageBox.ShowDialog();
  213. }));
  214. return messageBox._messageBoxResult;
  215. }
  216. /// <summary>
  217. /// 消息
  218. /// </summary>
  219. /// <param name="messageBoxText"></param>
  220. /// <param name="caption"></param>
  221. public static MessageBoxResult Info(string messageBoxText, string caption = null)
  222. {
  223. MessageBox messageBox = null;
  224. Application.Current.Dispatcher.Invoke(new Action(() =>
  225. {
  226. messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK);
  227. SetButtonStatus(messageBox, MessageBoxButton.OK, MessageBoxResult.OK);
  228. SetImage(messageBox, MessageBoxImage.Information);
  229. SystemSounds.Asterisk.Play();
  230. messageBox.ShowDialog();
  231. }));
  232. return messageBox._messageBoxResult;
  233. }
  234. /// <summary>
  235. /// 警告
  236. /// </summary>
  237. /// <param name="messageBoxText"></param>
  238. /// <param name="caption"></param>
  239. public static MessageBoxResult Warning(string messageBoxText, string caption = null)
  240. {
  241. MessageBox messageBox = null;
  242. Application.Current.Dispatcher.Invoke(new Action(() =>
  243. {
  244. messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Warning, MessageBoxResult.OK);
  245. SetButtonStatus(messageBox, MessageBoxButton.OK, MessageBoxResult.OK);
  246. SetImage(messageBox, MessageBoxImage.Warning);
  247. SystemSounds.Asterisk.Play();
  248. messageBox.ShowDialog();
  249. }));
  250. return messageBox._messageBoxResult;
  251. }
  252. /// <summary>
  253. /// 错误
  254. /// </summary>
  255. /// <param name="messageBoxText"></param>
  256. /// <param name="caption"></param>
  257. public static MessageBoxResult Error(string messageBoxText, string caption = null)
  258. {
  259. MessageBox messageBox = null;
  260. Application.Current.Dispatcher.Invoke(new Action(() =>
  261. {
  262. messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
  263. SetButtonStatus(messageBox, MessageBoxButton.OK, MessageBoxResult.OK);
  264. SetImage(messageBox, MessageBoxImage.Error);
  265. SystemSounds.Asterisk.Play();
  266. messageBox.ShowDialog();
  267. }));
  268. return messageBox._messageBoxResult;
  269. }
  270. /// <summary>
  271. /// 严重
  272. /// </summary>
  273. /// <param name="messageBoxText"></param>
  274. /// <param name="caption"></param>
  275. public static MessageBoxResult Fatal(string messageBoxText, string caption = null)
  276. {
  277. MessageBox messageBox = null;
  278. Application.Current.Dispatcher.Invoke(new Action(() =>
  279. {
  280. messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.OK);
  281. SetButtonStatus(messageBox, MessageBoxButton.OK, MessageBoxResult.OK);
  282. messageBox.ShowImage = true;
  283. messageBox.Image = ResourceHelper.GetResourceInternal<Geometry>(ResourceToken.FatalGeometry);
  284. messageBox.ImageBrush = ResourceHelper.GetResourceInternal<Brush>(ResourceToken.PrimaryTextBrush);
  285. SystemSounds.Asterisk.Play();
  286. messageBox.ShowDialog();
  287. }));
  288. return messageBox._messageBoxResult;
  289. }
  290. /// <summary>
  291. /// 询问
  292. /// </summary>
  293. /// <param name="messageBoxText"></param>
  294. /// <param name="caption"></param>
  295. public static MessageBoxResult Ask(string messageBoxText, string caption = null)
  296. {
  297. MessageBox messageBox = null;
  298. Application.Current.Dispatcher.Invoke(new Action(() =>
  299. {
  300. messageBox = CreateMessageBox(null, messageBoxText, caption, MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel);
  301. SetButtonStatus(messageBox, MessageBoxButton.OKCancel, MessageBoxResult.Cancel);
  302. SetImage(messageBox, MessageBoxImage.Question);
  303. SystemSounds.Asterisk.Play();
  304. messageBox.ShowDialog();
  305. }));
  306. return messageBox._messageBoxResult;
  307. }
  308. /// <summary>
  309. /// 自定义信息展示
  310. /// </summary>
  311. /// <param name="info"></param>
  312. /// <returns></returns>
  313. public static MessageBoxResult Show(MessageBoxInfo info)
  314. {
  315. MessageBox messageBox = null;
  316. Application.Current.Dispatcher.Invoke(new Action(() =>
  317. {
  318. messageBox = CreateMessageBox(null, info.Message, info.Caption, info.Button, MessageBoxImage.None, info.DefaultResult);
  319. SetButtonStatus(messageBox, info.Button, info.DefaultResult);
  320. if (!string.IsNullOrEmpty(info.IconKey))
  321. {
  322. messageBox.ShowImage = true;
  323. messageBox.Image = ResourceHelper.GetResource<Geometry>(info.IconKey) ?? info.Icon;
  324. messageBox.ImageBrush = ResourceHelper.GetResource<Brush>(info.IconBrushKey) ?? info.IconBrush;
  325. }
  326. if (info.StyleKey != null)
  327. {
  328. messageBox.Style = ResourceHelper.GetResource<Style>(info.StyleKey) ?? info.Style;
  329. }
  330. SystemSounds.Asterisk.Play();
  331. messageBox.ShowDialog();
  332. }));
  333. return messageBox._messageBoxResult;
  334. }
  335. /// <summary>
  336. /// 信息展示
  337. /// </summary>
  338. /// <param name="messageBoxText"></param>
  339. /// <param name="caption"></param>
  340. /// <param name="button"></param>
  341. /// <param name="icon"></param>
  342. /// <param name="defaultResult"></param>
  343. /// <returns></returns>
  344. public static MessageBoxResult Show(string messageBoxText, string caption = null,
  345. MessageBoxButton button = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None,
  346. MessageBoxResult defaultResult = MessageBoxResult.None) =>
  347. Show(null, messageBoxText, caption, button, icon, defaultResult);
  348. /// <summary>
  349. /// 信息展示
  350. /// </summary>
  351. /// <param name="owner"></param>
  352. /// <param name="messageBoxText"></param>
  353. /// <param name="caption"></param>
  354. /// <param name="button"></param>
  355. /// <param name="icon"></param>
  356. /// <param name="defaultResult"></param>
  357. /// <returns></returns>
  358. public static MessageBoxResult Show(System.Windows.Window owner, string messageBoxText, string caption = null, MessageBoxButton button = MessageBoxButton.OK, MessageBoxImage icon = MessageBoxImage.None, MessageBoxResult defaultResult = MessageBoxResult.None)
  359. {
  360. MessageBox messageBox = null;
  361. Application.Current.Dispatcher.Invoke(new Action(() =>
  362. {
  363. messageBox = CreateMessageBox(owner, messageBoxText, caption, button, icon, defaultResult);
  364. SetButtonStatus(messageBox, button, defaultResult);
  365. SetImage(messageBox, icon);
  366. SystemSounds.Asterisk.Play();
  367. messageBox.ShowDialog();
  368. }));
  369. return messageBox._messageBoxResult;
  370. }
  371. private static MessageBox CreateMessageBox(
  372. System.Windows.Window owner,
  373. string messageBoxText,
  374. string caption,
  375. MessageBoxButton button,
  376. MessageBoxImage icon,
  377. MessageBoxResult defaultResult)
  378. {
  379. if (!IsValidMessageBoxButton(button))
  380. {
  381. throw new InvalidEnumArgumentException(nameof(button), (int) button, typeof(MessageBoxButton));
  382. }
  383. if (!IsValidMessageBoxImage(icon))
  384. {
  385. throw new InvalidEnumArgumentException(nameof(icon), (int) icon, typeof(MessageBoxImage));
  386. }
  387. if (!IsValidMessageBoxResult(defaultResult))
  388. {
  389. throw new InvalidEnumArgumentException(nameof(defaultResult), (int) defaultResult, typeof(MessageBoxResult));
  390. }
  391. var ownerWindow = owner ?? WindowHelper.GetActiveWindow();
  392. var ownerIsNull = ownerWindow is null;
  393. return new MessageBox
  394. {
  395. Message = messageBoxText,
  396. Owner = ownerWindow,
  397. WindowStartupLocation = ownerIsNull ? WindowStartupLocation.CenterScreen : WindowStartupLocation.CenterOwner,
  398. ShowTitle = true,
  399. Title = caption ?? string.Empty,
  400. Topmost = ownerIsNull,
  401. _messageBoxResult = defaultResult
  402. };
  403. }
  404. private static void SetButtonStatus(MessageBox messageBox, MessageBoxButton messageBoxButton, MessageBoxResult defaultResult)
  405. {
  406. switch (messageBoxButton)
  407. {
  408. case MessageBoxButton.OK:
  409. messageBox._messageBoxResult = MessageBoxResult.Yes;
  410. messageBox._showOk = true;
  411. messageBox._buttonOk = new Button
  412. {
  413. IsCancel = true,
  414. IsDefault = true,
  415. Content = Lang.Confirm,
  416. Command = ControlCommands.Confirm,
  417. Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle")
  418. };
  419. break;
  420. case MessageBoxButton.OKCancel:
  421. messageBox._messageBoxResult = MessageBoxResult.Cancel;
  422. messageBox._showOk = true;
  423. messageBox._buttonOk = new Button
  424. {
  425. Content = Lang.Confirm,
  426. Command = ControlCommands.Confirm
  427. };
  428. messageBox._showCancel = true;
  429. messageBox._buttonCancel = new Button
  430. {
  431. IsCancel = true,
  432. Content = Lang.Cancel,
  433. Command = ControlCommands.Cancel
  434. };
  435. if (defaultResult == MessageBoxResult.Cancel)
  436. {
  437. messageBox._buttonOk.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  438. messageBox._buttonCancel.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  439. messageBox._buttonCancel.IsDefault = true;
  440. }
  441. else
  442. {
  443. messageBox._buttonOk.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  444. messageBox._buttonOk.IsDefault = true;
  445. messageBox._buttonCancel.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  446. }
  447. break;
  448. case MessageBoxButton.YesNo:
  449. messageBox._messageBoxResult = MessageBoxResult.Cancel;
  450. messageBox._showYes = true;
  451. messageBox._buttonYes = new Button
  452. {
  453. Content = Lang.Yes,
  454. Command = ControlCommands.Yes
  455. };
  456. messageBox._showNo = true;
  457. messageBox._buttonNo = new Button
  458. {
  459. Content = Lang.No,
  460. Command = ControlCommands.No
  461. };
  462. if (defaultResult == MessageBoxResult.No)
  463. {
  464. messageBox._buttonYes.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  465. messageBox._buttonNo.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  466. messageBox._buttonNo.IsDefault = true;
  467. }
  468. else
  469. {
  470. messageBox._buttonYes.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  471. messageBox._buttonYes.IsDefault = true;
  472. messageBox._buttonNo.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  473. }
  474. break;
  475. case MessageBoxButton.YesNoCancel:
  476. messageBox._messageBoxResult = MessageBoxResult.Cancel;
  477. messageBox._showYes = true;
  478. messageBox._buttonYes = new Button
  479. {
  480. Content = Lang.Yes,
  481. Command = ControlCommands.Yes
  482. };
  483. messageBox._showNo = true;
  484. messageBox._buttonNo = new Button
  485. {
  486. Content = Lang.No,
  487. Command = ControlCommands.No
  488. };
  489. messageBox._showCancel = true;
  490. messageBox._buttonCancel = new Button
  491. {
  492. IsCancel = true,
  493. Content = Lang.Cancel,
  494. Command = ControlCommands.Cancel
  495. };
  496. if (defaultResult == MessageBoxResult.No)
  497. {
  498. messageBox._buttonYes.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  499. messageBox._buttonNo.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  500. messageBox._buttonNo.IsDefault = true;
  501. messageBox._buttonCancel.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  502. }
  503. else if (defaultResult == MessageBoxResult.Cancel)
  504. {
  505. messageBox._buttonYes.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  506. messageBox._buttonNo.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  507. messageBox._buttonCancel.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  508. messageBox._buttonCancel.IsDefault = true;
  509. }
  510. else
  511. {
  512. messageBox._buttonYes.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxPrimaryButtonStyle");
  513. messageBox._buttonYes.IsDefault = true;
  514. messageBox._buttonNo.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  515. messageBox._buttonCancel.Style = ResourceHelper.GetResourceInternal<Style>("MessageBoxButtonStyle");
  516. }
  517. break;
  518. }
  519. }
  520. private static void SetImage(MessageBox messageBox, MessageBoxImage messageBoxImage)
  521. {
  522. var iconKey = string.Empty;
  523. var iconBrushKey = string.Empty;
  524. switch (messageBoxImage)
  525. {
  526. case MessageBoxImage.Error:
  527. iconKey = ResourceToken.ErrorGeometry;
  528. iconBrushKey = ResourceToken.DangerBrush;
  529. break;
  530. case MessageBoxImage.Question:
  531. iconKey = ResourceToken.AskGeometry;
  532. iconBrushKey = ResourceToken.AccentBrush;
  533. break;
  534. case MessageBoxImage.Warning:
  535. iconKey = ResourceToken.WarningGeometry;
  536. iconBrushKey = ResourceToken.WarningBrush;
  537. break;
  538. case MessageBoxImage.Information:
  539. iconKey = ResourceToken.InfoGeometry;
  540. iconBrushKey = ResourceToken.InfoBrush;
  541. break;
  542. }
  543. if (string.IsNullOrEmpty(iconKey)) return;
  544. messageBox.ShowImage = true;
  545. messageBox.Image = ResourceHelper.GetResourceInternal<Geometry>(iconKey);
  546. messageBox.ImageBrush = ResourceHelper.GetResourceInternal<Brush>(iconBrushKey);
  547. }
  548. private static bool IsValidMessageBoxButton(MessageBoxButton value)
  549. {
  550. return value == MessageBoxButton.OK
  551. || value == MessageBoxButton.OKCancel
  552. || value == MessageBoxButton.YesNo
  553. || value == MessageBoxButton.YesNoCancel;
  554. }
  555. [SuppressMessage("ReSharper", "ConditionIsAlwaysTrueOrFalse")]
  556. private static bool IsValidMessageBoxImage(MessageBoxImage value)
  557. {
  558. return value == MessageBoxImage.Asterisk
  559. || value == MessageBoxImage.Error
  560. || value == MessageBoxImage.Exclamation
  561. || value == MessageBoxImage.Hand
  562. || value == MessageBoxImage.Information
  563. || value == MessageBoxImage.None
  564. || value == MessageBoxImage.Question
  565. || value == MessageBoxImage.Stop
  566. || value == MessageBoxImage.Warning;
  567. }
  568. private static bool IsValidMessageBoxResult(MessageBoxResult value)
  569. {
  570. return value == MessageBoxResult.Cancel
  571. || value == MessageBoxResult.No
  572. || value == MessageBoxResult.None
  573. || value == MessageBoxResult.OK
  574. || value == MessageBoxResult.Yes;
  575. }
  576. }