using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.Media; using Project_Periodensystem.Model; using Project_Periodensystem.Persistence; using Project_Periodensystem.View.Converters; using System; using System.Globalization; using System.Linq; namespace Project_Periodensystem.View { public partial class PeriodicTablePage : UserControl { private readonly Grid? periodicGrid; public PeriodicTablePage() { InitializeComponent(); periodicGrid = this.Find("PeriodicGrid"); InitializePeriodicTable(); } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } private void InitializePeriodicTable() { try { Logger.Log("Initialisiere PeriodicTable..."); // Prüfen ob das Grid gefunden wurde if (periodicGrid == null) { Logger.Log("FEHLER: PeriodicGrid nicht gefunden!"); return; } // Prüfen ob Elemente vorhanden sind if (PeriodicTableData.Elements == null || !PeriodicTableData.Elements.Any()) { Logger.Log("FEHLER: Keine Elemente in PeriodicTableData!"); return; } var converter = new SeriesToColorConverter(); // Elemente hinzufügen foreach (var element in PeriodicTableData.Elements) { Logger.Log($"Füge Element hinzu: {element.Symbol} ({element.Row},{element.Column})"); var border = new Border { Width = 58, Height = 58, Margin = new Thickness(1), CornerRadius = new CornerRadius(4), BorderThickness = new Thickness(1), BorderBrush = new SolidColorBrush(Colors.Gray), Background = converter.Convert(element.Series, typeof(IBrush), null!, CultureInfo.CurrentCulture) as IBrush // Hier wird die Farbe gesetzt }; var stackPanel = new StackPanel(); // Symbol stackPanel.Children.Add(new TextBlock { Text = element.Symbol, FontSize = 20, Foreground = new SolidColorBrush(Colors.White), HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center }); // Atomic Number stackPanel.Children.Add(new TextBlock { Text = element.AtomicNumber.ToString(), FontSize = 12, Foreground = new SolidColorBrush(Colors.White), HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center }); border.Child = stackPanel; // Position setzen Grid.SetRow(border, Math.Max(0, element.Row - 1)); Grid.SetColumn(border, Math.Max(0, element.Column - 1)); periodicGrid.Children.Add(border); Logger.Log($"Element {element.Symbol} wurde hinzugefügt"); } Logger.Log("PeriodicTable wurde initialisiert"); } catch (Exception ex) { Logger.Log($"FEHLER beim Initialisieren des PeriodicTable: {ex.Message}"); Logger.Log($"StackTrace: {ex.StackTrace}"); } } private void ThemeButton_Click(object? sender, RoutedEventArgs e) { var nextTheme = MainWindow.CurrentTheme switch { AppTheme.Dark => AppTheme.Light, AppTheme.Light => AppTheme.Classic, _ => AppTheme.Dark }; if (this.Parent is ContentControl content && content.Parent is MainWindow mainWindow) { mainWindow.UpdateTheme(nextTheme); } } private void AboutButton_Click(object? sender, RoutedEventArgs e) { if (this.Parent is ContentControl content && content.Parent is MainWindow mainWindow) { mainWindow.ShowAboutPage(); } } } }