DFDateControl.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using InABox.Core;
  2. using Syncfusion.Windows.Shared;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Globalization;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. namespace InABox.DynamicGrid
  11. {
  12. public class DFDateControl : DynamicFormFieldControl<DFLayoutDateField, DFLayoutDateFieldProperties, DateTime>
  13. {
  14. private DateTimeEdit Date = null!; // late-initialising
  15. protected override FrameworkElement Create()
  16. {
  17. Date = new DateTimeEdit();
  18. Date.DateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat;
  19. Date.Pattern = DateTimePattern.ShortDate;
  20. var def = Field.Properties.Default;
  21. Date.DateTime = def.IsEmpty()
  22. ? DateTime.Now
  23. : def;
  24. Date.DateTimeChanged += (sender, e) => ChangeField();
  25. Date.EnableMouseWheelEdit = false;
  26. return Date;
  27. }
  28. public override void Deserialize(string serialized)
  29. {
  30. if (DateTime.TryParseExact(serialized, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None,
  31. out DateTime d))
  32. SetValue(d);
  33. }
  34. public override string Serialize() =>
  35. GetValue().ToString("dd-MM-yyyy");
  36. public override DateTime GetValue() => Date.DateTime ?? DateTime.MinValue;
  37. public override void SetValue(DateTime value) => Date.DateTime = value;
  38. protected override bool IsEmpty() => Date.DateTime == null || Date.DateTime == DateTime.MinValue;
  39. }
  40. }