public virtual ImageSource SelectIconSource(IFileSystemItemModel itemModel, bool isDirectory, string fileSystemItemFullName)
        {
            FileAttributeConstants iconType = System.IO.File.Exists(fileSystemItemFullName) ? FileAttributeConstants.FILE_ATTRIBUTE_NORMAL : System.IO.Directory.Exists(fileSystemItemFullName) ? FileAttributeConstants.FILE_ATTRIBUTE_DIRECTORY : FileAttributeConstants.DEFAULT;

            if (iconType == FileAttributeConstants.DEFAULT || itemModel is SpecialDirectory)
            {
                return(null);
            }

            return(GetFileSystemItemIcon(fileSystemItemFullName, true, iconType));
        }
        private static ImageSource GetFileSystemItemIcon(string filePath, bool isSmall, FileAttributeConstants iconType)
        {
            SHFILEINFO info       = new SHFILEINFO(true);
            int        cbFileInfo = Marshal.SizeOf(info);
            SHGFI      flags;

            if (isSmall)
            {
                flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;
            }
            else
            {
                flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes;
            }

            SHGetFileInfo(filePath, (uint)iconType, ref info, (uint)cbFileInfo, flags);

            using var defaultAssociatedIconWinFormsIcon = Icon.FromHandle(info.hIcon);
            return(ConvertIconToImageSource(defaultAssociatedIconWinFormsIcon));
        }