MainWindow.xaml.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using System;
  2. using System.Diagnostics.Eventing.Reader;
  3. using System.Globalization;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.Windows.Threading;
  15. using Microsoft.Extensions.Configuration;
  16. namespace CountDown;
  17. /// <summary>
  18. /// Interaction logic for MainWindow.xaml
  19. /// </summary>
  20. public partial class MainWindow : Window
  21. {
  22. public DateTime EventDate { get; set; }
  23. private DispatcherTimer _timer;
  24. readonly CultureInfo _enUS = new ("en-US");
  25. public TimeSpan Counter
  26. {
  27. get { return (TimeSpan)GetValue(CounterProperty); }
  28. set { SetValue(CounterProperty, value); }
  29. }
  30. public static readonly DependencyProperty CounterProperty =
  31. DependencyProperty.Register(nameof(Counter), typeof(TimeSpan), typeof(MainWindow), new PropertyMetadata(new TimeSpan(0, 0, 0)));
  32. public MainWindow()
  33. {
  34. InitializeComponent();
  35. DataContext = this;
  36. var dateString = App.Config?.GetChildren().FirstOrDefault(c => c.Key == "EventDate")?.Value ?? "2025-06-30 23:59:59";
  37. if (DateTime.TryParseExact(dateString, "yyyy-MM-dd HH:mm:s", _enUS,
  38. DateTimeStyles.None, out DateTime dateValue))
  39. {
  40. EventDate = dateValue;
  41. }
  42. else
  43. {
  44. EventDate = new DateTime(2025, 06, 30, 23, 59, 59, DateTimeKind.Local);
  45. }
  46. Left = System.Windows.SystemParameters.PrimaryScreenWidth - Width - 20;
  47. Top = System.Windows.SystemParameters.PrimaryScreenHeight - Height - 100;
  48. Topmost = true;
  49. BitmapImage image = new (new Uri("./background.png", UriKind.Relative));
  50. ImageBrush fond = new (image);
  51. this.Background = fond;
  52. _timer = new();
  53. _timer.Interval = new TimeSpan(0, 0, 1);
  54. _timer.Tick += TimerTicked;
  55. _timer.Start();
  56. }
  57. private void SetTime()
  58. {
  59. Counter = EventDate - DateTime.Now;
  60. }
  61. private void TimerTicked(object? sender, EventArgs e)
  62. {
  63. SetTime();
  64. }
  65. }