Sidebar-Kompaktmodus polieren, Dashboard-Kalender ergänzen

- MainWindow: App-Titel durch ein kompaktes Logo-Badge ersetzt; im
  minimierten Zustand der Sidebar werden Nav-Icons automatisch größer
  und zentriert, Beschriftungen sowie Abschnittsüberschriften blenden
  aus (Classes-Binding auf DrawerPage.IsOpen).
- LearningGroup.IsOwnClass: neues Feld, per Checkbox im Gruppen-Dialog
  editierbar ("Gehört zu meiner Klasse"), mehrere Gruppen markierbar.
- Dashboard: kleiner Monatskalender mit Monatsnavigation, dezenter
  Einfärbung für Unterrichtstage, Klausur-Marker und Rahmen-Hervor-
  hebung für Tage der eigenen Klasse, inkl. Tooltip und Legende.
  Feste Kartenposition/-breite, damit weder Monatsnamenlänge noch die
  wachsende Lerngruppen-Liste das Layout verschieben.
- TODO.md: geplante Kalender-Detailansicht (Tag auswählen → Termine
  des Tages mit Sprung in die jeweilige Ansicht) unter 9.8 vermerkt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 00:14:28 +02:00
co-authored by Claude Sonnet 5
parent 8cbd4475d7
commit d00cea0bfe
7 changed files with 329 additions and 29 deletions
@@ -13,7 +13,7 @@
<TextBlock Text="{Binding CurrentDate}" FontSize="24" FontWeight="SemiBold"/>
</StackPanel>
<Grid ColumnDefinitions="*,*" RowDefinitions="Auto,Auto">
<Grid ColumnDefinitions="*,*" RowDefinitions="Auto,Auto,Auto">
<!-- Heutige Stunden -->
<Border Grid.Column="0" Grid.Row="0" Margin="0,0,8,8"
@@ -67,8 +67,108 @@
</StackPanel>
</Border>
<!-- Meine Lerngruppen -->
<Border Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2"
<!-- Kalender: feste Position direkt unter Heute/Aufgaben, damit die wachsende
Lerngruppen-Liste darunter ihn nicht nach unten verdrängt. -->
<Border Grid.Column="0" Grid.Row="1" Margin="0,0,8,8" HorizontalAlignment="Left"
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
CornerRadius="8" Padding="16">
<StackPanel Spacing="8">
<StackPanel.Styles>
<!-- Basiswerte als Style (nicht lokal), damit die spezifischeren Selektoren
(z.B. .daycell.ownclass) sie überschreiben können. -->
<Style Selector="Border.daycell">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Opacity" Value="1"/>
</Style>
<Style Selector="Border.daycell.haslesson">
<Setter Property="Background" Value="#14808080"/>
</Style>
<Style Selector="Border.daycell.ownclass">
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="BorderBrush" Value="{DynamicResource SystemControlBackgroundAccentBrush}"/>
</Style>
<Style Selector="Border.daycell.outside">
<Setter Property="Opacity" Value="0.35"/>
</Style>
<Style Selector="TextBlock.daynum">
<Setter Property="FontWeight" Value="Normal"/>
</Style>
<Style Selector="TextBlock.daynum.today">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="{DynamicResource SystemControlForegroundAccentBrush}"/>
</Style>
</StackPanel.Styles>
<Grid ColumnDefinitions="Auto,*,Auto,Auto,Auto">
<TextBlock Grid.Column="0" Text="KALENDER" FontSize="11" FontWeight="Bold"
Opacity="0.5" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="{Binding CalendarMonthLabel}" FontSize="13"
FontWeight="SemiBold" TextAlignment="Center" VerticalAlignment="Center"
Width="130" Margin="12,0"/>
<Button Grid.Column="2" Content="Heute" FontSize="11" Padding="8,2"
Command="{Binding CalendarTodayCommand}" Margin="0,0,4,0"/>
<Button Grid.Column="3" Content="" Padding="8,2" Command="{Binding PrevMonthCommand}"/>
<Button Grid.Column="4" Content="" Padding="8,2" Command="{Binding NextMonthCommand}" Margin="4,0,0,0"/>
</Grid>
<ItemsControl ItemsSource="{Binding CalendarWeekdayHeaders}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate><UniformGrid Columns="7"/></ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FontSize="10" Opacity="0.5" FontWeight="Bold"
HorizontalAlignment="Center" Width="32"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding CalendarDays}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate><UniformGrid Columns="7"/></ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:CalendarDayCell">
<Border Classes="daycell" Classes.ownclass="{Binding IsOwnClassDay}"
Classes.haslesson="{Binding HasLesson}"
Classes.outside="{Binding !IsCurrentMonth}"
Width="32" Height="32" Margin="1" CornerRadius="6"
ToolTip.Tip="{Binding Tooltip}">
<Grid>
<TextBlock Classes="daynum" Classes.today="{Binding IsToday}"
Text="{Binding DayNumber}" FontSize="12"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Ellipse Width="5" Height="5" Fill="#E53935" Margin="0,0,0,3"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
IsVisible="{Binding HasExam}"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<StackPanel Orientation="Horizontal" Spacing="14" Margin="0,4,0,0">
<StackPanel Orientation="Horizontal" Spacing="4">
<Border Width="10" Height="10" CornerRadius="3" Background="#14808080"/>
<TextBlock Text="Unterricht" FontSize="10" Opacity="0.6"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="4">
<Ellipse Width="7" Height="7" Fill="#E53935"/>
<TextBlock Text="Klausur" FontSize="10" Opacity="0.6"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Spacing="4">
<Border Width="10" Height="10" CornerRadius="3" BorderThickness="2"
BorderBrush="{DynamicResource SystemControlBackgroundAccentBrush}"/>
<TextBlock Text="Meine Klasse" FontSize="10" Opacity="0.6"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Border>
<!-- Meine Lerngruppen: wächst mit der Zeit, deshalb ganz unten und volle Breite -->
<Border Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2"
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
CornerRadius="8" Padding="16">
<StackPanel>