Notenübersicht der Gruppe (Matrix, Gesamt-Spalte, Sortierung, Halbjahresfilter), Einzelnoten-Pflege samt Sammelerfassung, Gewichtungsschema mit Voreinstellung je Gruppentyp, Zeugnisnoten-Berechnung mit Übersteuern/Festschreiben/Export und Notenentwicklung im Schülerdetail. Dazu Anwesenheits-/Hausaufgaben-Tracking je Mitarbeit-Sitzung, ein neuer Mitarbeits-Assistent (Zeitleiste mit Abschnitten, automatischer Notenvorschlag, Zusammenzug zur Halbjahresnote) und eine Dashboard-Kachel für offene Entschuldigungen. Außerdem: verbliebene englische Begriffe in Auswahlfeldern und Buttons auf Deutsch umgestellt.
240 lines
12 KiB
XML
240 lines
12 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels"
|
||
x:Class="LehrerApp.Desktop.Views.Dashboard.DashboardView"
|
||
x:DataType="vm:DashboardViewModel">
|
||
|
||
<ScrollViewer Padding="24">
|
||
<StackPanel Spacing="20">
|
||
|
||
<!-- Begrüßung -->
|
||
<StackPanel>
|
||
<TextBlock Text="{Binding Greeting}" FontSize="14" Opacity="0.6"/>
|
||
<TextBlock Text="{Binding CurrentDate}" FontSize="24" FontWeight="SemiBold"/>
|
||
</StackPanel>
|
||
|
||
<Grid ColumnDefinitions="*,*" RowDefinitions="Auto,Auto,Auto">
|
||
|
||
<!-- Heutige Stunden -->
|
||
<Border Grid.Column="0" Grid.Row="0" Margin="0,0,8,8"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="HEUTE" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding TodaysLessons}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:LessonItem">
|
||
<Grid ColumnDefinitions="4,*" Margin="0,4">
|
||
<Border Grid.Column="0" Width="4" CornerRadius="2"
|
||
Background="{DynamicResource SystemAccentColor}"
|
||
Margin="0,0,10,0"/>
|
||
<StackPanel Grid.Column="1">
|
||
<TextBlock Text="{Binding GroupName}" FontWeight="SemiBold" FontSize="13"/>
|
||
<TextBlock Text="{Binding Topic}" FontSize="12" Opacity="0.7"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine Stunden heute" Opacity="0.4" FontSize="13"
|
||
IsVisible="{Binding !TodaysLessons.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Offene Aufgaben -->
|
||
<Border Grid.Column="1" Grid.Row="0" Margin="8,0,0,8"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="OFFENE AUFGABEN" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding OpenTasks}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:TaskItem">
|
||
<Grid ColumnDefinitions="*,Auto" Margin="0,3">
|
||
<TextBlock Grid.Column="0" Text="{Binding Title}"
|
||
FontSize="13" TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding DueDate}"
|
||
FontSize="12" Opacity="0.6" Margin="8,0,0,0"/>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine offenen Aufgaben" Opacity="0.4" FontSize="13"
|
||
IsVisible="{Binding !OpenTasks.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- 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>
|
||
|
||
<!-- Offene Entschuldigungen: neben dem Kalender, ebenfalls feste Position -->
|
||
<Border Grid.Column="1" Grid.Row="1" Margin="8,0,0,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="OFFENE ENTSCHULDIGUNGEN" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding OpenExcuses}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:OpenExcuseItem">
|
||
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,4">
|
||
<StackPanel Grid.Column="0">
|
||
<TextBlock Text="{Binding StudentName}" FontSize="13" FontWeight="SemiBold"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock FontSize="11" Opacity="0.6">
|
||
<Run Text="{Binding GroupName}"/>
|
||
<Run Text=" · "/>
|
||
<Run Text="{Binding DateDisplay}"/>
|
||
</TextBlock>
|
||
</StackPanel>
|
||
<Button Grid.Column="1" Content="Entschuldigt" FontSize="11" Padding="7,3"
|
||
Command="{Binding MarkExcusedCommand}" Margin="0,0,4,0"/>
|
||
<Button Grid.Column="2" Content="Unentschuldigt" FontSize="11" Padding="7,3"
|
||
Command="{Binding MarkUnexcusedCommand}"/>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine offenen Entschuldigungen." Opacity="0.4" FontSize="13"
|
||
IsVisible="{Binding !OpenExcuses.Count}"/>
|
||
</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>
|
||
<TextBlock Text="MEINE LERNGRUPPEN" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding CurrentGroups}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal"/>
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:GroupChip">
|
||
<Button Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenGroupCommand}"
|
||
CommandParameter="{Binding}"
|
||
Background="{DynamicResource SystemAccentColorLight2}"
|
||
CornerRadius="6" Padding="12,6" Margin="0,0,8,8">
|
||
<StackPanel>
|
||
<TextBlock Text="{Binding Name}" FontWeight="SemiBold" FontSize="13"/>
|
||
<TextBlock Text="{Binding Subject}" FontSize="11" Opacity="0.7"
|
||
IsVisible="{Binding Subject, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||
</StackPanel>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Noch keine Lerngruppen." Opacity="0.4" FontSize="13"
|
||
IsVisible="{Binding !CurrentGroups.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
</Grid>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
</UserControl>
|