Panel.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using System.Drawing;
  2. namespace System.Windows.Forms
  3. {
  4. public class Panel : ContainerControl
  5. {
  6. protected override void OnPaint(PaintEventArgs e)
  7. {
  8. base.OnPaint(e);
  9. if (BorderStyle != BorderStyle.None)
  10. this.DrawVisualStyleBorder(e.Graphics, new Rectangle(0, 0, Width - 1, Height - 1));
  11. }
  12. }
  13. public class PanelBase : ContainerControl
  14. {
  15. protected System.Windows.Controls.ContentControl contentControl;
  16. protected System.Windows.Controls.Panel panel;
  17. public double MaxWidth
  18. {
  19. get => control.MaxWidth;
  20. set => control.MaxWidth = value;
  21. }
  22. public Windows.HorizontalAlignment HorizontalAlignment
  23. {
  24. get => control.HorizontalAlignment;
  25. set => control.HorizontalAlignment = value;
  26. }
  27. public Windows.VerticalAlignment VerticalAlignment
  28. {
  29. get => control.VerticalAlignment;
  30. set => control.VerticalAlignment = value;
  31. }
  32. protected void SetPanel(System.Windows.Controls.Panel panel)
  33. {
  34. contentControl = new System.Windows.Controls.ContentControl();
  35. this.panel = panel;
  36. SetContentControl(contentControl, contentControl, panel);
  37. HorizontalAlignment = Windows.HorizontalAlignment.Stretch;
  38. VerticalAlignment = VerticalAlignment.Stretch;
  39. panel.ClearValue(FrameworkElement.FlowDirectionProperty);
  40. }
  41. internal override void AddChild(Control child)
  42. {
  43. var c = child.control;
  44. c.Margin = new System.Windows.Thickness(c.Margin.Left + Margin.Left, c.Margin.Top + Margin.Top, c.Margin.Right + Margin.Right, c.Margin.Bottom + Margin.Bottom);
  45. panel.Children.Add(c);
  46. }
  47. internal override void RemoveChild(Control child)
  48. {
  49. panel.Children.Remove(child.control);
  50. }
  51. internal override void SetChildIndex(Control child, int index)
  52. {
  53. panel.Children.Insert(index, child.control);
  54. }
  55. protected override void SetControlWidth(int value)
  56. {
  57. }
  58. protected override void SetControlHeight(int value)
  59. {
  60. }
  61. protected override void SetControlLeft(int value)
  62. {
  63. }
  64. protected override void SetControlTop(int value)
  65. {
  66. }
  67. }
  68. // light version of Panel which is also based on Grid, but w/o owner draw control
  69. public class GridPanel : PanelBase
  70. {
  71. public GridPanel()
  72. {
  73. SetPanel(new System.Windows.Controls.Grid());
  74. }
  75. }
  76. public class StackedPanel : PanelBase
  77. {
  78. private System.Windows.Controls.StackPanel stackPanel;
  79. public bool Vertical
  80. {
  81. get => stackPanel.Orientation == Windows.Controls.Orientation.Vertical;
  82. set => stackPanel.Orientation = value ? Windows.Controls.Orientation.Vertical : Windows.Controls.Orientation.Horizontal;
  83. }
  84. public StackedPanel()
  85. {
  86. stackPanel = new System.Windows.Controls.StackPanel();
  87. SetPanel(stackPanel);
  88. }
  89. }
  90. public class WrappedPanel : PanelBase
  91. {
  92. private System.Windows.Controls.WrapPanel wrapPanel;
  93. public WrappedPanel()
  94. {
  95. wrapPanel = new System.Windows.Controls.WrapPanel();
  96. SetPanel(wrapPanel);
  97. }
  98. }
  99. public class DockedPanel : PanelBase
  100. {
  101. private System.Windows.Controls.DockPanel dockPanel;
  102. public DockStyle DockStyle { get; set; }
  103. internal override void AddChild(Control child)
  104. {
  105. base.AddChild(child);
  106. if (DockStyle == DockStyle.Top)
  107. System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Top);
  108. else if (DockStyle == DockStyle.Bottom)
  109. System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Bottom);
  110. else if (DockStyle == DockStyle.Left)
  111. System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Left);
  112. else if (DockStyle == DockStyle.Right)
  113. System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Right);
  114. }
  115. public DockedPanel()
  116. {
  117. dockPanel = new System.Windows.Controls.DockPanel();
  118. dockPanel.LastChildFill = true;
  119. SetPanel(dockPanel);
  120. }
  121. }
  122. }