MetroMsgbox.xaml.vb 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. Public Class MetroMsgbox
  2. Private MyConverter As MyMsgboxConverter
  3. Public Sub New(ByVal Converter As MyMsgboxConverter)
  4. InitializeComponent()
  5. btn1.Name = btn1.Name & GetUUID()
  6. btn2.Name = btn2.Name & GetUUID()
  7. btn3.Name = btn3.Name & GetUUID()
  8. MyConverter = Converter
  9. labTitle.Text = Converter.Title
  10. labCaption.Text = Converter.Caption
  11. btn1.Text = Converter.Button1
  12. If Converter.IsWarn Then btn1.ColorType = Button.State.RED
  13. btn2.Text = Converter.Button2
  14. btn3.Text = Converter.Button3
  15. btn2.Visibility = If(Converter.Button2 = "", Visibility.Collapsed, Visibility.Visible)
  16. btn3.Visibility = If(Converter.Button3 = "", Visibility.Collapsed, Visibility.Visible)
  17. End Sub
  18. Private Sub Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Loaded
  19. Try
  20. log("[MsgBox] 显示弹窗:" & labTitle.Text)
  21. log("[MsgBox] 弹窗内容:" & Mid(labCaption.Text, 1, 400) & If(Len(labCaption.Text) > 400, "...", ""))
  22. If panCaption.ActualWidth = panMain.ActualWidth Then panMain.Width = panMain.ActualWidth + 75
  23. panMain.UpdateLayout()
  24. '配色初始化
  25. If btn2.IsVisible And Not btn1.ColorType = Button.State.RED Then btn1.ColorType = Button.State.HIGHLIGHT
  26. '延时执行的动画
  27. Me.Name = "frm" & GetUUID()
  28. AniStart({
  29. AaBackGround(Me, New MyColor(20, 0, 0, 0), 500, , New AniEaseStart),
  30. AaBackGround(panMain, New MyColor(255, 0, 0, 0), 300, , New AniEaseStart),
  31. AaOpacity(shadow, 0.75, 600, 150),
  32. AaWidth(line, panMain.ActualWidth - 40, 350, 150, New AniEaseEnd),
  33. AaOpacity(line, 1, 250, 150),
  34. AaWidth(labTitle, labTitle.ActualWidth, 250, 200, New AniEaseEnd),
  35. AaOpacity(labTitle, 1, 200, 200),
  36. AaOpacity(panCaption, 1, 250, 250),
  37. AaHeight(btn1, btn1.ActualHeight, 150, 300),
  38. AaHeight(btn2, btn2.ActualHeight, 150, 350),
  39. AaHeight(btn3, btn3.ActualHeight, 150, 400)
  40. }, "MsgboxStart" & Me.Name)
  41. '动画初始化
  42. panBtn.Height = panBtn.ActualHeight
  43. btn1.Height = 0
  44. btn2.Height = 0
  45. btn3.Height = 0
  46. labTitle.Width = 0
  47. labTitle.Opacity = 0
  48. labTitle.TextWrapping = TextWrapping.NoWrap
  49. panCaption.Opacity = 0
  50. Catch ex As Exception
  51. ExShow(ex, "弹窗显示失败", ErrorLevel.AllUsers)
  52. End Try
  53. End Sub
  54. Private Sub CloseWindow()
  55. log("[MsgBox] 关闭弹窗,返回值:" & MyConverter.ReturnCode)
  56. AniStart({
  57. AaBackGround(Me, New MyColor(-20, 0, 0, 0), 300, , New AniEaseStart),
  58. AaBackGround(panMain, New MyColor(-255, 0, 0, 0), 300, 100, New AniEaseStart),
  59. AaOpacity(shadow, -0.75, 150),
  60. AaWidth(line, -line.ActualWidth, 250, , New AniEaseStart),
  61. AaOpacity(line, -1, 150, 100),
  62. AaWidth(labTitle, -labTitle.ActualWidth, 250),
  63. AaOpacity(labTitle, -1, 200),
  64. AaOpacity(panCaption, -1, 200),
  65. AaHeight(btn1, -btn1.ActualHeight, 150, 60),
  66. AaHeight(btn2, -btn2.ActualHeight, 150, 30),
  67. AaHeight(btn3, -btn3.ActualHeight, 150),
  68. AaCode({"Close", Me}, , True)
  69. }, "MsgboxClose" & Me.Name)
  70. End Sub
  71. Private Sub MetroMsgbox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs) Handles Me.KeyDown
  72. If e.Key = Key.Enter Then btn1_Click()
  73. End Sub
  74. Private Sub btn1_Click() Handles btn1.Click
  75. If MyConverter.IsExited Then Exit Sub
  76. MyConverter.IsExited = True
  77. MyConverter.ReturnCode = 1
  78. CloseWindow()
  79. End Sub
  80. Private Sub btn2_Click() Handles btn2.Click
  81. If MyConverter.IsExited Then Exit Sub
  82. MyConverter.IsExited = True
  83. MyConverter.ReturnCode = 2
  84. CloseWindow()
  85. End Sub
  86. Private Sub btn3_Click() Handles btn3.Click
  87. If MyConverter.IsExited Then Exit Sub
  88. MyConverter.IsExited = True
  89. MyConverter.ReturnCode = 3
  90. CloseWindow()
  91. End Sub
  92. End Class