Sun, 01 Feb 2015 10:35:07 +0100
added vbox,hbox function (WPF)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace UI { public interface Container { void Add(UIElement control, bool fill); } public enum BoxOrientation { VERTICAL, HORIZONTAL } public class BoxContainer : Grid, Container { public BoxOrientation Orientation; private int x = 0; private int y = 0; private bool filled = false; public BoxContainer(BoxOrientation orientation) : base() { Orientation = orientation; if(Orientation == BoxOrientation.HORIZONTAL) { RowDefinition row = new RowDefinition(); row.Height = new GridLength(1, GridUnitType.Star); RowDefinitions.Add(row); } else { ColumnDefinition col = new ColumnDefinition(); col.Width = new GridLength(1, GridUnitType.Star); ColumnDefinitions.Add(col); } } public BoxContainer(Container parent, BoxOrientation orientation) : this(orientation) { parent.Add(this, true); } public void Add(UIElement control, bool fill) { if(Orientation == BoxOrientation.HORIZONTAL) { ColumnDefinition col = new ColumnDefinition(); if(filled && fill) { fill = false; Console.WriteLine("BoxContainer can only contain one filled control"); } if(fill) { col.Width = new GridLength(1, GridUnitType.Star); filled = true; } else { col.Width = GridLength.Auto; } ColumnDefinitions.Add(col); } else { RowDefinition row = new RowDefinition(); if (filled && fill) { fill = false; Console.WriteLine("BoxContainer can only contain one filled control"); } if(fill) { row.Height = new GridLength(1, GridUnitType.Star); filled = true; } else { row.Height = GridLength.Auto; } RowDefinitions.Add(row); } Grid.SetColumn(control, x); Grid.SetRow(control, y); Children.Add(control); if(Orientation == BoxOrientation.HORIZONTAL) { x++; } else { y++; } } public static BoxContainer CreateBoxContainer(Container parent, BoxOrientation orientation) { return Application.GetInstance().Exec<BoxContainer>(() => new BoxContainer(parent, orientation)); } } public class GridContainer : Container { public Grid Grid; public GridContainer(System.Windows.Controls.Grid grid) { Grid = grid; } public void Add(UIElement control, bool fill) { } } }