|
@@ -0,0 +1,115 @@
|
|
|
+using Avalonia;
|
|
|
+using Avalonia.Controls;
|
|
|
+using Avalonia.LogicalTree;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+
|
|
|
+namespace InABox.Avalonia;
|
|
|
+
|
|
|
+public static class AvaloniaUtils
|
|
|
+{
|
|
|
+
|
|
|
+ #region Grid Children
|
|
|
+
|
|
|
+ public static int GetRow(this Grid grid, ILogical dependencyObject)
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ var parent = dependencyObject.GetLogicalParent();
|
|
|
+ if (parent == null)
|
|
|
+ return -1;
|
|
|
+ if (parent == grid)
|
|
|
+ return dependencyObject is Control control ? Grid.GetRow(control) : -1;
|
|
|
+ dependencyObject = parent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static int GetRowSpan(this Grid grid, ILogical dependencyObject)
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ var parent = dependencyObject.GetLogicalParent();
|
|
|
+ if (parent == null)
|
|
|
+ return -1;
|
|
|
+ if (parent == grid)
|
|
|
+ return dependencyObject is Control control ? Grid.GetRowSpan(control) : -1;
|
|
|
+ dependencyObject = parent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static int GetColumn(this Grid grid, ILogical dependencyObject)
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ var parent = dependencyObject.GetLogicalParent();
|
|
|
+ if (parent == null)
|
|
|
+ return -1;
|
|
|
+ if (parent == grid)
|
|
|
+ return dependencyObject is Control control ? Grid.GetColumn(control) : -1;
|
|
|
+ dependencyObject = parent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static int GetColumnSpan(this Grid grid, ILogical dependencyObject)
|
|
|
+ {
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ var parent = dependencyObject.GetLogicalParent();
|
|
|
+ if (parent == null)
|
|
|
+ return -1;
|
|
|
+ if (parent == grid)
|
|
|
+ return dependencyObject is Control control ? Grid.GetColumnSpan(control) : -1;
|
|
|
+ dependencyObject = parent;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void SetGridPosition(this AvaloniaObject element, int row, int column, int rowspan = 1, int colspan = 1)
|
|
|
+ {
|
|
|
+ element.SetValue(Grid.ColumnProperty, column);
|
|
|
+ element.SetValue(Grid.ColumnSpanProperty, Math.Max(1, colspan));
|
|
|
+ element.SetValue(Grid.RowProperty, row);
|
|
|
+ element.SetValue(Grid.RowSpanProperty, Math.Max(1, rowspan));
|
|
|
+ }
|
|
|
+ public static Grid AddChild(this Grid grid, Control element, int row, int column, int rowSpan = 1, int colSpan = 1)
|
|
|
+ {
|
|
|
+ element.SetGridPosition(row, column, rowSpan, colSpan);
|
|
|
+ grid.Children.Add(element);
|
|
|
+ return grid;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region Grid Columns + Rows
|
|
|
+
|
|
|
+ public static ColumnDefinition AddColumn(this Grid grid, GridUnitType type, double value = 1)
|
|
|
+ {
|
|
|
+ var colDef = new ColumnDefinition { Width = new GridLength(value, type) };
|
|
|
+ grid.ColumnDefinitions.Add(colDef);
|
|
|
+ return colDef;
|
|
|
+ }
|
|
|
+ public static ColumnDefinition AddColumn(this Grid grid, double value)
|
|
|
+ {
|
|
|
+ var colDef = new ColumnDefinition { Width = new GridLength(value) };
|
|
|
+ grid.ColumnDefinitions.Add(colDef);
|
|
|
+ return colDef;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static RowDefinition AddRow(this Grid grid, GridUnitType type, double value = 1)
|
|
|
+ {
|
|
|
+ var rowDef = new RowDefinition { Height = new GridLength(value, type) };
|
|
|
+ grid.RowDefinitions.Add(rowDef);
|
|
|
+ return rowDef;
|
|
|
+ }
|
|
|
+ public static RowDefinition AddRow(this Grid grid, double value)
|
|
|
+ {
|
|
|
+ var rowDef = new RowDefinition { Height = new GridLength(value) };
|
|
|
+ grid.RowDefinitions.Add(rowDef);
|
|
|
+ return rowDef;
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+}
|