38 lines
1.1 KiB
C#
38 lines
1.1 KiB
C#
|
|
using System.Reflection;
|
|||
|
|
|
|||
|
|
namespace WPFluent.Gallery.ControlsLookup;
|
|||
|
|
|
|||
|
|
internal static class ControlPages
|
|||
|
|
{
|
|||
|
|
private const string PageSuffix = "Page";
|
|||
|
|
|
|||
|
|
internal record GalleryPage(string Name, string Description, SymbolRegular Icon, Type PageType);
|
|||
|
|
|
|||
|
|
public static IEnumerable<GalleryPage> All()
|
|||
|
|
{
|
|||
|
|
foreach (
|
|||
|
|
Type? type in Assembly.GetExecutingAssembly().GetTypes()
|
|||
|
|
.Where(t => t.IsDefined(typeof(GalleryPageAttribute)))
|
|||
|
|
)
|
|||
|
|
{
|
|||
|
|
GalleryPageAttribute? galleryPageAttribute = type.GetCustomAttributes<GalleryPageAttribute>()
|
|||
|
|
.FirstOrDefault();
|
|||
|
|
|
|||
|
|
if (galleryPageAttribute is not null)
|
|||
|
|
{
|
|||
|
|
yield return new GalleryPage(
|
|||
|
|
type.Name[..type.Name.LastIndexOf(PageSuffix)],
|
|||
|
|
galleryPageAttribute.Description,
|
|||
|
|
galleryPageAttribute.Icon,
|
|||
|
|
type
|
|||
|
|
);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static IEnumerable<GalleryPage> FromNamespace(string namespaceName)
|
|||
|
|
{
|
|||
|
|
return All().Where(t => t.PageType?.Namespace?.StartsWith(namespaceName) ?? false);
|
|||
|
|
}
|
|||
|
|
}
|