private Grid CreateSpawnsetGrid(SpawnsetListEntry entry)
        {
            Grid grid = new Grid {
                Tag = entry
            };

            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(3, GridUnitType.Star)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(2, GridUnitType.Star)
            });
            grid.ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(2, GridUnitType.Star)
            });
            for (int i = 0; i < 5; i++)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition());
            }

            Hyperlink nameHyperlink = new Hyperlink(new Run(entry.SpawnsetFile.Name.Replace("_", "__")));

            nameHyperlink.Click += (sender, e) => Download_Click($"{entry.SpawnsetFile.Name}_{entry.SpawnsetFile.Author}");

            UIElement nameElement;

            if (string.IsNullOrEmpty(entry.SpawnsetFile.settings.Description))
            {
                nameElement = new Label {
                    Content = nameHyperlink
                };
            }
            else
            {
                Label toolTipLabel = new Label
                {
                    Content    = "(?)",
                    FontWeight = FontWeights.Bold,
                    ToolTip    = new TextBlock
                    {
                        Text     = $"{entry.SpawnsetFile.Author}:\n\n{entry.SpawnsetFile.settings.Description.Trim(' ').Replace("<br />", "\n").Replace("<ul>", "\n").Replace("</ul>", "\n").Replace("<li>", "\n").HTMLToPlainText()}",                     // TODO: Use a proper HTML to XAML converter.
                        MaxWidth = 320
                    }
                };
                ToolTipService.SetShowDuration(toolTipLabel, int.MaxValue);

                nameElement = new StackPanel {
                    Orientation = Orientation.Horizontal
                };
                StackPanel nameStackPanel = nameElement as StackPanel;
                nameStackPanel.Children.Add(new Label {
                    Content = nameHyperlink
                });
                nameStackPanel.Children.Add(toolTipLabel);
            }

            Span customLeaderboardElement;

            if (entry.HasLeaderboard)
            {
                customLeaderboardElement = new Hyperlink(new Run("Yes"))
                {
                    NavigateUri = new Uri(UrlUtils.CustomLeaderboard(entry.SpawnsetFile.FileName))
                };
                (customLeaderboardElement as Hyperlink).RequestNavigate += (sender, e) =>
                {
                    Process.Start(new ProcessStartInfo(e.Uri.AbsoluteUri));
                    e.Handled = true;
                };
            }
            else
            {
                customLeaderboardElement = new Span(new Run("No"));
            }

            List <UIElement> elements = new List <UIElement>
            {
                nameElement,
                new Label {
                    Content = entry.SpawnsetFile.Author.Replace("_", "__")
                },
                new Label {
                    Content = entry.SpawnsetFile.settings.LastUpdated.ToString("dd MMM yyyy")
                },
                new Label {
                    Content = customLeaderboardElement
                },
                new Label {
                    Content = !entry.SpawnsetFile.spawnsetData.NonLoopLengthNullable.HasValue ? "N/A" : entry.SpawnsetFile.spawnsetData.NonLoopLengthNullable.Value.ToString(SpawnUtils.Format), HorizontalAlignment = HorizontalAlignment.Right
                },
                new Label {
                    Content = entry.SpawnsetFile.spawnsetData.NonLoopSpawns == 0 ? "N/A" : entry.SpawnsetFile.spawnsetData.NonLoopSpawns.ToString(), HorizontalAlignment = HorizontalAlignment.Right
                },
                new Label {
                    Content = !entry.SpawnsetFile.spawnsetData.LoopLengthNullable.HasValue ? "N/A" : entry.SpawnsetFile.spawnsetData.LoopLengthNullable.Value.ToString(SpawnUtils.Format), HorizontalAlignment = HorizontalAlignment.Right
                },
                new Label {
                    Content = entry.SpawnsetFile.spawnsetData.LoopSpawns == 0 ? "N/A" : entry.SpawnsetFile.spawnsetData.LoopSpawns.ToString(), HorizontalAlignment = HorizontalAlignment.Right
                }
            };

            for (int i = 0; i < elements.Count; i++)
            {
                Grid.SetColumn(elements[i], i);
                grid.Children.Add(elements[i]);
            }

            return(grid);
        }