File: BoundsDesignTypeConverter.cs
Web Access
Project: src\src\Controls\src\Core.Design\Controls.Core.Design.csproj (Microsoft.Maui.Controls.DesignTools)
using System;
using System.ComponentModel;
using System.Globalization;
 
namespace Microsoft.Maui.Controls.Design
{
	public class BoundsDesignTypeConverter : StringConverter
	{
		public override bool IsValid(ITypeDescriptorContext context, object value)
		{
			// MUST MATCH BoundsTypeConverter.ConvertFrom
			string strValue = value?.ToString();
			if (string.IsNullOrEmpty(strValue))
				return false;
 
			string[] xywh = strValue.Split(',');
			bool hasX, hasY, hasW, hasH;
 
			hasX = (xywh.Length == 2 || xywh.Length == 4) && double.TryParse(xywh[0], NumberStyles.Number, CultureInfo.InvariantCulture, out _);
			hasY = (xywh.Length == 2 || xywh.Length == 4) && double.TryParse(xywh[1], NumberStyles.Number, CultureInfo.InvariantCulture, out _);
			hasW = xywh.Length == 4 && double.TryParse(xywh[2], NumberStyles.Number, CultureInfo.InvariantCulture, out _);
			hasH = xywh.Length == 4 && double.TryParse(xywh[3], NumberStyles.Number, CultureInfo.InvariantCulture, out _);
			if (!hasW && xywh.Length == 4 && string.Compare("AutoSize", xywh[2].Trim(), StringComparison.OrdinalIgnoreCase) == 0)
			{
				hasW = true;
			}
 
			if (!hasH && xywh.Length == 4 && string.Compare("AutoSize", xywh[3].Trim(), StringComparison.OrdinalIgnoreCase) == 0)
			{
				hasH = true;
			}
 
			if (hasX && hasY && xywh.Length == 2)
				return true;
			if (hasX && hasY && hasW && hasH && xywh.Length == 4)
				return true;
 
			return false;
		}
	}
}