PictureBox.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System.ComponentModel;
  2. using System.Drawing;
  3. namespace System.Windows.Forms
  4. {
  5. public class PictureBox : Control, ISupportInitialize
  6. {
  7. private System.Windows.Controls.Image imageControl;
  8. protected new System.Windows.Controls.ContentControl control { get; }
  9. private Image image;
  10. public Image Image
  11. {
  12. get => image;
  13. set
  14. {
  15. image = value;
  16. imageControl.Source = Helper.GetImage(value);
  17. UpdateAutoSize();
  18. }
  19. }
  20. private PictureBoxSizeMode sizeMode;
  21. public PictureBoxSizeMode SizeMode
  22. {
  23. get => sizeMode;
  24. set
  25. {
  26. sizeMode = value;
  27. imageControl.Stretch = sizeMode switch
  28. {
  29. PictureBoxSizeMode.StretchImage => Media.Stretch.Fill,
  30. PictureBoxSizeMode.Zoom => Media.Stretch.Uniform,
  31. _ => Media.Stretch.None
  32. };
  33. if (sizeMode == PictureBoxSizeMode.Normal)
  34. {
  35. imageControl.HorizontalAlignment = Windows.HorizontalAlignment.Left;
  36. imageControl.VerticalAlignment = Windows.VerticalAlignment.Top;
  37. }
  38. else if (sizeMode == PictureBoxSizeMode.CenterImage)
  39. {
  40. imageControl.HorizontalAlignment = Windows.HorizontalAlignment.Center;
  41. imageControl.VerticalAlignment = Windows.VerticalAlignment.Center;
  42. }
  43. else
  44. {
  45. imageControl.HorizontalAlignment = Windows.HorizontalAlignment.Stretch;
  46. imageControl.VerticalAlignment = Windows.VerticalAlignment.Stretch;
  47. }
  48. UpdateAutoSize();
  49. }
  50. }
  51. private void UpdateAutoSize()
  52. {
  53. if (SizeMode == PictureBoxSizeMode.AutoSize)
  54. {
  55. Width = Image == null ? 0 : Image.Width;
  56. Height = Image == null ? 0 : Image.Height;
  57. }
  58. }
  59. public void BeginInit() { }
  60. public void EndInit() { }
  61. public PictureBox()
  62. {
  63. imageControl = new();
  64. control = new();
  65. control.Content = imageControl;
  66. SetControl(control);
  67. }
  68. }
  69. }