123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- using System.Drawing;
- namespace System.Windows.Forms
- {
- public class Panel : ContainerControl
- {
- protected override void OnPaint(PaintEventArgs e)
- {
- base.OnPaint(e);
- if (BorderStyle != BorderStyle.None)
- this.DrawVisualStyleBorder(e.Graphics, new Rectangle(0, 0, Width - 1, Height - 1));
- }
- }
- public class PanelBase : ContainerControl
- {
- protected System.Windows.Controls.ContentControl contentControl;
- protected System.Windows.Controls.Panel panel;
- public double MaxWidth
- {
- get => control.MaxWidth;
- set => control.MaxWidth = value;
- }
- public Windows.HorizontalAlignment HorizontalAlignment
- {
- get => control.HorizontalAlignment;
- set => control.HorizontalAlignment = value;
- }
- public Windows.VerticalAlignment VerticalAlignment
- {
- get => control.VerticalAlignment;
- set => control.VerticalAlignment = value;
- }
- protected void SetPanel(System.Windows.Controls.Panel panel)
- {
- contentControl = new System.Windows.Controls.ContentControl();
- this.panel = panel;
- SetContentControl(contentControl, contentControl, panel);
- HorizontalAlignment = Windows.HorizontalAlignment.Stretch;
- VerticalAlignment = VerticalAlignment.Stretch;
- panel.ClearValue(FrameworkElement.FlowDirectionProperty);
- }
- internal override void AddChild(Control child)
- {
- var c = child.control;
- 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);
- panel.Children.Add(c);
- }
- internal override void RemoveChild(Control child)
- {
- panel.Children.Remove(child.control);
- }
- internal override void SetChildIndex(Control child, int index)
- {
- panel.Children.Insert(index, child.control);
- }
- protected override void SetControlWidth(int value)
- {
- }
- protected override void SetControlHeight(int value)
- {
- }
- protected override void SetControlLeft(int value)
- {
- }
- protected override void SetControlTop(int value)
- {
- }
- }
- // light version of Panel which is also based on Grid, but w/o owner draw control
- public class GridPanel : PanelBase
- {
- public GridPanel()
- {
- SetPanel(new System.Windows.Controls.Grid());
- }
- }
- public class StackedPanel : PanelBase
- {
- private System.Windows.Controls.StackPanel stackPanel;
- public bool Vertical
- {
- get => stackPanel.Orientation == Windows.Controls.Orientation.Vertical;
- set => stackPanel.Orientation = value ? Windows.Controls.Orientation.Vertical : Windows.Controls.Orientation.Horizontal;
- }
- public StackedPanel()
- {
- stackPanel = new System.Windows.Controls.StackPanel();
- SetPanel(stackPanel);
- }
- }
- public class WrappedPanel : PanelBase
- {
- private System.Windows.Controls.WrapPanel wrapPanel;
- public WrappedPanel()
- {
- wrapPanel = new System.Windows.Controls.WrapPanel();
- SetPanel(wrapPanel);
- }
- }
- public class DockedPanel : PanelBase
- {
- private System.Windows.Controls.DockPanel dockPanel;
- public DockStyle DockStyle { get; set; }
- internal override void AddChild(Control child)
- {
- base.AddChild(child);
- if (DockStyle == DockStyle.Top)
- System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Top);
- else if (DockStyle == DockStyle.Bottom)
- System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Bottom);
- else if (DockStyle == DockStyle.Left)
- System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Left);
- else if (DockStyle == DockStyle.Right)
- System.Windows.Controls.DockPanel.SetDock(child.control, Windows.Controls.Dock.Right);
- }
- public DockedPanel()
- {
- dockPanel = new System.Windows.Controls.DockPanel();
- dockPanel.LastChildFill = true;
- SetPanel(dockPanel);
- }
- }
- }
|