private int GetColumnsCount(Enum_UIColumnsType uIColumnsType)
 {
     if (ColumnsCount == 1)
     {
         if (uIColumnsType == Enum_UIColumnsType.Normal)
         {
             return(1);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Half)
         {
             return(1);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Full)
         {
             return(1);
         }
     }
     else if (ColumnsCount == 2)
     {
         if (uIColumnsType == Enum_UIColumnsType.Normal)
         {
             return(1);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Half)
         {
             return(1);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Full)
         {
             return(2);
         }
     }
     else if (ColumnsCount == 3)
     {
         if (uIColumnsType == Enum_UIColumnsType.Normal)
         {
             return(1);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Half)
         {
             return(2);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Full)
         {
             return(3);
         }
     }
     else if (ColumnsCount == 4)
     {
         if (uIColumnsType == Enum_UIColumnsType.Normal)
         {
             return(1);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Half)
         {
             return(2);
         }
         else if (uIColumnsType == Enum_UIColumnsType.Full)
         {
             return(4);
         }
     }
     return(1);
 }
        private void AddControlToGrid(FrameworkElement mainElement, Enum_UIColumnsType UIColumnsType, short UIRowsCount
                                      , FrameworkElement labelElement)
        {
            int  logicalColumnCount  = GetColumnsCount(UIColumnsType);
            int  physicalColumnCount = Convert.ToInt16(logicalColumnCount * 2 - 1);
            int  rowsCount           = 0;
            bool makeRowHeightAuto   = false;

            if (UIRowsCount == -1)
            {
                rowsCount         = 1;
                makeRowHeightAuto = true;
            }
            else if (UIRowsCount == 0)
            {
                rowsCount = 1;
            }
            else
            {
                rowsCount = UIRowsCount;
            }

            Tuple <int, int> GetReadyCursor = GetReadeyCursor(physicalColumnCount, rowsCount);

            CurrentColumn = GetReadyCursor.Item1;
            CurrentRow    = GetReadyCursor.Item2;

            Grid.SetColumn(mainElement, CurrentColumn - (labelElement != null ? 0 : 1));
            Grid.SetRow(mainElement, CurrentRow);
            if (makeRowHeightAuto)
            {
                Grid.RowDefinitions[CurrentRow].Height = GridLength.Auto;
            }
            if (physicalColumnCount > 1)
            {
                Grid.SetColumnSpan(mainElement, physicalColumnCount + (labelElement != null ? 0 : 1));
            }
            else if (labelElement == null)
            {
                Grid.SetColumnSpan(mainElement, physicalColumnCount + 1);
            }

            if (rowsCount > 1)
            {
                var rowcount = Grid.RowDefinitions.Count - 1;
                for (int i = CurrentRow; i <= CurrentRow + rowsCount - 1; i++)
                {
                    if (Grid.RowDefinitions.Count - 1 < i)
                    {
                        AddRow();
                    }
                }
                Grid.SetRowSpan(mainElement, rowsCount);
                mainElement.VerticalAlignment = VerticalAlignment.Stretch;
            }
            for (int col = CurrentColumn; col < CurrentColumn + physicalColumnCount; col++)
            {
                for (int row = CurrentRow; row < CurrentRow + rowsCount; row++)
                {
                    ReservedCells.Add(new Tuple <int, int>(col, row));
                }
            }
            if (labelElement != null)
            {
                Grid.SetColumn(labelElement, CurrentColumn - 1);
                Grid.SetRow(labelElement, CurrentRow);
                for (int row = CurrentRow; row < CurrentRow + rowsCount; row++)
                {
                    ReservedCells.Add(new Tuple <int, int>(CurrentColumn - 1, row));
                }

                Grid.Children.Add(labelElement);
            }
            CurrentColumn += physicalColumnCount + 1;
            //foreach (var item in Grid.Children)
            //{
            //    if (item == mainElement)
            //        return;
            //}
            Grid.Children.Add(mainElement);
        }