bloxstrap/Bloxstrap/UI/Converters/EnumNameConverter.cs
2024-09-01 09:52:43 +01:00

52 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Xml.Linq;
namespace Bloxstrap.UI.Converters
{
class EnumNameConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// https://stackoverflow.com/a/28672015/11852173
var enumVal = (Enum)value;
var stringVal = enumVal.ToString();
var type = enumVal.GetType();
var typeName = type.FullName!;
var attributes = type.GetMember(stringVal)[0].GetCustomAttributes(typeof(EnumNameAttribute), false);
if (attributes.Length > 0)
{
var attribute = (EnumNameAttribute)attributes[0];
if (attribute is not null)
{
if (attribute.StaticName is not null)
return attribute.StaticName;
if (attribute.FromTranslation is not null)
return Strings.ResourceManager.GetStringSafe(attribute.FromTranslation);
}
}
return Strings.ResourceManager.GetStringSafe(String.Format(
"{0}.{1}",
typeName.Substring(typeName.IndexOf('.', StringComparison.Ordinal) + 1),
stringVal
));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
}