Files
LehrerApp/LehrerApp.Desktop/Views/Groups/ExamDialog.axaml
T
adminandClaude Sonnet 5 21378bbebd Klausurverwaltung: Anlegen, Bearbeiten, Duplizieren, Status, Aufgaben
Implementiert TODO 1.1 (Klausur anlegen/verwalten) und die dazu passenden
Teile von 1.2 (Aufgabenstruktur), da beides im selben Dialog verwaltet wird:

- ExamDialog: Klausur anlegen/bearbeiten/duplizieren mit Aufgaben-Editor
  (Nr./Titel/Maximalpunkte/Gewichtung, sortierbar), Gesamtpunkte-Anzeige
  mit Warnung bei 0 Punkten, und Kompetenz-Zuordnung je Aufgabe.
- Klausuren-Tab: Kontextmenü und Toolbar für Bearbeiten/Duplizieren/
  Löschen (mit Rückfrage), farbcodierte Status-Spalte, SplitButton für
  Statuswechsel (Klick = nächster Status, Dropdown = manuelles Setzen).
- ExamRepository.Delete löscht zugehörige ExamResults kaskadierend.
- Gewichtung ist standardmäßig ausgeblendet (Checkbox zum Einblenden),
  NumericUpDown-Felder ohne Spinner-Buttons wegen eines Layout-Bugs im
  Avalonia-Standardtemplate, der das interne Textfeld auf wenige Pixel
  schrumpfen ließ.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-11 22:00:48 +02:00

122 lines
6.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels.Groups"
x:Class="LehrerApp.Desktop.Views.Groups.ExamDialog"
x:DataType="vm:ExamDialogViewModel"
Title="{Binding DialogTitle}"
Width="640" Height="680" MinWidth="560" MinHeight="420"
CanResize="True" WindowStartupLocation="CenterOwner">
<Grid RowDefinitions="*,Auto" Margin="24">
<ScrollViewer Grid.Row="0">
<StackPanel Spacing="14" Margin="0,0,12,0">
<TextBlock Text="{Binding DialogTitle}" FontSize="18" FontWeight="SemiBold"/>
<StackPanel Spacing="4">
<TextBlock Text="Titel *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Title}" PlaceholderText="z.B. 1. Klausur Kinetik"/>
</StackPanel>
<Grid ColumnDefinitions="*,12,*,12,*">
<StackPanel Grid.Column="0" Spacing="4">
<TextBlock Text="Datum *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding DateText}" PlaceholderText="TT.MM.JJJJ"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="Fach" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Subject}"/>
</StackPanel>
<StackPanel Grid.Column="4" Spacing="4">
<TextBlock Text="Klausurnummer" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding ExamNumber}" Minimum="1" Maximum="20" FormatString="0"
ShowButtonSpinner="False"/>
</StackPanel>
</Grid>
<StackPanel Spacing="4">
<TextBlock Text="Notizen" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Notes}" AcceptsReturn="True" Height="56" TextWrapping="Wrap"/>
</StackPanel>
<Separator Margin="0,4"/>
<Grid ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Text="Aufgaben" FontSize="14" FontWeight="SemiBold" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content=" Aufgabe" Command="{Binding AddTaskCommand}"/>
</Grid>
<CheckBox Content="Gewichtung verwenden" IsChecked="{Binding UseWeighting}"/>
<Grid ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Text="{Binding TotalPointsDisplay}" FontSize="12" Opacity="0.7"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="Achtung: noch keine Punkte vergeben" Foreground="Red" FontSize="12"
IsVisible="{Binding TotalPointsWarning}" VerticalAlignment="Center"/>
</Grid>
<ItemsControl ItemsSource="{Binding Tasks}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:ExamTaskEditItem">
<Border BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}"
BorderThickness="1" CornerRadius="4" Padding="8" Margin="0,0,0,6">
<StackPanel Spacing="6">
<Grid ColumnDefinitions="26,*,Auto,Auto,Auto,Auto,Auto">
<TextBlock Grid.Column="0" Text="{Binding Nr}" VerticalAlignment="Center" Opacity="0.6"/>
<TextBox Grid.Column="1" Text="{Binding Title}" PlaceholderText="Titel der Aufgabe" Margin="0,0,6,0"/>
<NumericUpDown Grid.Column="2" Value="{Binding MaxPoints}" Minimum="0" FormatString="0.##"
Width="72" ShowButtonSpinner="False" Margin="0,0,6,0" ToolTip.Tip="Maximalpunkte"/>
<NumericUpDown Grid.Column="3" Value="{Binding Weight}" Minimum="0" FormatString="0.##"
Width="72" ShowButtonSpinner="False" Margin="0,0,6,0" ToolTip.Tip="Gewichtung"
IsVisible="{Binding ShowWeight}"/>
<Button Grid.Column="4" Content="↑" Command="{Binding MoveUpCommand}" Padding="6,2"
ToolTip.Tip="Nach oben"/>
<Button Grid.Column="5" Content="↓" Command="{Binding MoveDownCommand}" Padding="6,2"
ToolTip.Tip="Nach unten" Margin="4,0,0,0"/>
<Button Grid.Column="6" Content="✕" Command="{Binding RemoveCommand}" Padding="6,2"
ToolTip.Tip="Entfernen" Margin="4,0,0,0"/>
</Grid>
<Button Content="{Binding CompetencySummary}" Command="{Binding ToggleCompetencyPanelCommand}"
HorizontalAlignment="Left" FontSize="11" Padding="6,2"/>
<ItemsControl ItemsSource="{Binding CompetencyTagGroups}" IsVisible="{Binding IsCompetencyPanelOpen}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:CompetencyTagGroup">
<StackPanel Margin="12,2">
<TextBlock Text="{Binding DisplayName}" FontSize="11" Opacity="0.6"/>
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:CompetencyTag">
<ToggleButton Content="{Binding Display}" IsChecked="{Binding IsSelected}"
Margin="0,2,6,2" FontSize="11" Padding="6,2"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="{Binding ValidationMessage}" Foreground="Red" FontSize="12"
IsVisible="{Binding ValidationMessage, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
</ScrollViewer>
<Grid Grid.Row="1" ColumnDefinitions="*,8,*" Margin="0,20,0,0">
<Button Grid.Column="0" Content="Abbrechen" HorizontalAlignment="Stretch" Click="OnCancel"/>
<Button Grid.Column="2" Content="{Binding SaveButtonText}"
HorizontalAlignment="Stretch" Click="OnSave"/>
</Grid>
</Grid>
</Window>