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 }