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); }