| File: FontAttributes.cs | Web Access |
| Project: src\src\Controls\src\Core\Controls.Core.csproj (Microsoft.Maui.Controls) |
#nullable disable using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; namespace Microsoft.Maui.Controls { /// <include file="../../docs/Microsoft.Maui.Controls/FontAttributes.xml" path="Type[@FullName='Microsoft.Maui.Controls.FontAttributes']/Docs/*" /> [Flags] public enum FontAttributes { /// <include file="../../docs/Microsoft.Maui.Controls/FontAttributes.xml" path="//Member[@MemberName='None']/Docs/*" /> None = 0, /// <include file="../../docs/Microsoft.Maui.Controls/FontAttributes.xml" path="//Member[@MemberName='Bold']/Docs/*" /> Bold = 1 << 0, /// <include file="../../docs/Microsoft.Maui.Controls/FontAttributes.xml" path="//Member[@MemberName='Italic']/Docs/*" /> Italic = 1 << 1 } /// <include file="../../docs/Microsoft.Maui.Controls/FontAttributesConverter.xml" path="Type[@FullName='Microsoft.Maui.Controls.FontAttributesConverter']/Docs/*" /> public sealed class FontAttributesConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) => sourceType == typeof(string); public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) => destinationType == typeof(string); public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { var strValue = value?.ToString(); if (string.IsNullOrEmpty(strValue)) return FontAttributes.None; FontAttributes attributes = FontAttributes.None; strValue = strValue.Trim(); if (strValue.IndexOf(",", StringComparison.Ordinal) != -1) { //Xaml foreach (var part in strValue.Split(',')) attributes |= ParseSingleAttribute(part, strValue); } else { //CSS or single value foreach (var part in strValue.Split(' ')) attributes |= ParseSingleAttribute(part, strValue); } return attributes; } static FontAttributes ParseSingleAttribute(string part, string originalvalue) { part = part.Trim(); if (Enum.TryParse(part, true, out FontAttributes attr)) return attr; if (part.Equals("normal", StringComparison.OrdinalIgnoreCase)) return FontAttributes.None; if (part.Equals("oblique", StringComparison.OrdinalIgnoreCase)) return FontAttributes.Italic; throw new InvalidOperationException(string.Format("Cannot convert \"{0}\" into {1}", originalvalue, typeof(FontAttributes))); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (value is not FontAttributes attr) throw new NotSupportedException(); if (attr == FontAttributes.None) return ""; var parts = new List<string>(); if ((attr & FontAttributes.Bold) == FontAttributes.Bold) parts.Add(nameof(FontAttributes.Bold)); if ((attr & FontAttributes.Italic) == FontAttributes.Italic) parts.Add(nameof(FontAttributes.Italic)); return string.Join("' ", parts); } } }