WinMessage.xaml.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Input;
  6. using System.Windows.Interop;
  7. namespace SAGA.DotNetUtils.WPF
  8. {
  9. /// <summary>
  10. /// WinMessageTip.xaml 的交互逻辑
  11. /// </summary>
  12. public partial class WinMessage : Window
  13. {
  14. public WinMessage(List<TipButtonItem> items)
  15. {
  16. InitializeComponent();
  17. this.DisableUseClose = true;
  18. this.ShowInTaskbar = false;
  19. this.AddHandler(Button.ClickEvent, new RoutedEventHandler(Button_Click));
  20. items.ForEach(item => StackButtons.Children.Add(CreateButton(item)));
  21. this.Loaded += WinMessageTip_Loaded;
  22. this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Copy, (s,e)=> {
  23. Clipboard.SetDataObject(Message, false);
  24. }));
  25. }
  26. private void WinMessageTip_Loaded(object sender, RoutedEventArgs e)
  27. {
  28. if(DisableUseClose)
  29. {
  30. DisableClose();
  31. }
  32. }
  33. private void Button_Click(object sender, RoutedEventArgs e)
  34. {
  35. Button button = e.Source as Button;
  36. if (button == null)
  37. return;
  38. TipButtonItem tipItem = button.Tag as TipButtonItem;
  39. try
  40. {
  41. if (tipItem == null)
  42. {
  43. Flag = 0;
  44. }
  45. else
  46. {
  47. Flag = Convert.ToInt32(tipItem.Flag);
  48. }
  49. }
  50. catch (Exception)
  51. {
  52. Flag = 0;
  53. }
  54. this.DialogResult = true;
  55. }
  56. internal bool DisableUseClose { get; set; }
  57. /// <summary>
  58. /// 选中标志
  59. /// </summary>
  60. public int Flag { get; private set; }
  61. public string Message {
  62. get { return TxtMessage.Text; }
  63. set { this.TxtMessage.Text = value;
  64. }
  65. }
  66. private Button CreateButton(TipButtonItem item)
  67. {
  68. Button button = new Button();
  69. button.MinWidth = 60;
  70. button.MinHeight = 23;
  71. button.Margin = new Thickness(10, 0, 10, 0);
  72. button.VerticalAlignment = VerticalAlignment.Center;
  73. button.Content = item.Content;
  74. button.IsDefault = item.IsDefault;
  75. button.IsCancel = item.IsCancel;
  76. if (item.ContentTemplate != null)
  77. {
  78. button.ContentTemplate = item.ContentTemplate;
  79. }
  80. button.Tag = item;
  81. return button;
  82. }
  83. private void DisableClose()
  84. {
  85. this.Closing += WinMessageTip_Closing;
  86. var interop = new WindowInteropHelper(this);
  87. int handle = interop.EnsureHandle().ToInt32();
  88. CloseButton.Disable(handle);
  89. }
  90. private void WinMessageTip_Closing(object sender, System.ComponentModel.CancelEventArgs e)
  91. {
  92. //当关闭按钮不能用,并且dialogResult不是ture时,定义为atl+F4,关闭,这种关闭方式取消
  93. if (DisableUseClose&&this.DialogResult!=true)
  94. {
  95. e.Cancel = true;
  96. }
  97. }
  98. }
  99. }