Files
LehrerApp/LehrerApp.Desktop/Views/Students/StudentDetailView.axaml
T
adminandClaude Sonnet 5 629b8d1bf0 Codepflege: CLAUDE.md und UI-Konsolidierung (Kapitel 13.4)
CLAUDE.md mit Projektkonventionen für künftige Claude-Code-Sitzungen.
Wiederkehrende UI-Muster konsolidiert: neue PageHeader-Control für
Titel/Untertitel in den Listen- und Detailansichten, globale Styles für
Dialog-Titel und Leerlisten-Hinweise statt inline wiederholter Werte.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 16:14:40 +02:00

220 lines
12 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.
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels.Students"
xmlns:shared="clr-namespace:LehrerApp.Desktop.Views.Shared"
x:Class="LehrerApp.Desktop.Views.Students.StudentDetailView"
x:DataType="vm:StudentDetailViewModel">
<Grid RowDefinitions="Auto,*">
<!-- Header -->
<Border Grid.Row="0" Padding="20,16"
BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}"
BorderThickness="0,0,0,1">
<Grid ColumnDefinitions="*,Auto">
<shared:PageHeader Grid.Column="0" IsVisible="{Binding !IsEditing}" Title="{Binding StudentTitle}"/>
<StackPanel Grid.Column="0" Spacing="6" IsVisible="{Binding IsEditing}">
<Grid ColumnDefinitions="*,8,*">
<TextBox Grid.Column="0" Text="{Binding EditFirstName}" PlaceholderText="Vorname"/>
<TextBox Grid.Column="2" Text="{Binding EditLastName}" PlaceholderText="Nachname"/>
</Grid>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="8" VerticalAlignment="Top">
<Button Content="Bearbeiten" Command="{Binding StartEditCommand}"
IsVisible="{Binding !IsEditing}"/>
<Button Content="Speichern" Command="{Binding SaveEditCommand}"
IsVisible="{Binding IsEditing}"/>
<Button Content="Abbrechen" Command="{Binding CancelEditCommand}"
IsVisible="{Binding IsEditing}"/>
</StackPanel>
</Grid>
</Border>
<!--
Avalonia 12: TabbedPage für Schüler-Tabs.
Kein manuelles Tab-Management nötig.
-->
<TabbedPage Grid.Row="1" TabPlacement="Top">
<ContentPage Header="Übersicht">
<ScrollViewer Padding="20">
<StackPanel Spacing="12">
<TextBlock Text="Lerngruppen" FontSize="15" FontWeight="SemiBold"/>
<ItemsControl ItemsSource="{Binding GroupMemberships}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="vm:GroupMembershipEntry">
<Border Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
CornerRadius="6" Padding="12,8" Margin="0,0,0,6">
<Grid ColumnDefinitions="70,*,Auto">
<TextBlock Grid.Column="0" Text="{Binding SchoolYear}" FontWeight="SemiBold"/>
<TextBlock Grid.Column="1" Text="{Binding GroupName}" Margin="8,0"/>
<TextBlock Grid.Column="2" Text="{Binding Subject}" Opacity="0.5" FontSize="12"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="Keine Lerngruppenzuordnungen vorhanden." Opacity="0.4"
IsVisible="{Binding !GroupMemberships.Count}"/>
</StackPanel>
</ScrollViewer>
</ContentPage>
<ContentPage Header="Kontakte">
<Grid RowDefinitions="Auto,*" Margin="20">
<Grid Grid.Row="0" ColumnDefinitions="*,Auto,Auto,Auto" Margin="0,0,0,10">
<TextBlock Grid.Column="0" Text="Kontaktdaten" FontSize="15"
FontWeight="SemiBold" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content=" Neu" Command="{Binding AddContactCommand}"
Margin="0,0,8,0"/>
<Button Grid.Column="2" Content="Bearbeiten" Command="{Binding EditContactCommand}"
Margin="0,0,8,0"/>
<Button Grid.Column="3" Content="Adresse anzeigen"
Command="{Binding ViewSelectedAddressCommand}"/>
</Grid>
<ListBox Grid.Row="1" x:Name="ContactList"
ItemsSource="{Binding Contacts}"
SelectedItem="{Binding SelectedContact}"
DoubleTapped="OnContactDoubleTapped">
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:ContactItem">
<Border Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
CornerRadius="8" Padding="14,10" Margin="2,3">
<Grid ColumnDefinitions="220,*,Auto" RowDefinitions="Auto,Auto">
<StackPanel Grid.Column="0" Grid.RowSpan="2" Spacing="4">
<TextBlock Text="{Binding Name}" FontWeight="SemiBold" FontSize="14"
TextWrapping="Wrap"/>
<Border Background="{DynamicResource SystemControlForegroundBaseLowBrush}"
CornerRadius="4" Padding="6,2" HorizontalAlignment="Left">
<TextBlock Text="{Binding Relation}" FontSize="11" Opacity="0.7"/>
</Border>
</StackPanel>
<StackPanel Grid.Column="1" Grid.Row="0" Orientation="Horizontal" Spacing="8">
<Button Content="{Binding PhoneDisplay}"
Command="{Binding CallCommand}"
IsVisible="{Binding HasPhone}"
FontSize="12" Padding="8,4"/>
<Button Content="{Binding EmailDisplay}"
Command="{Binding MailCommand}"
IsVisible="{Binding HasEmail}"
FontSize="12" Padding="8,4"/>
</StackPanel>
<TextBlock Grid.Column="1" Grid.Row="1" Text="{Binding Address}"
IsVisible="{Binding HasAddress}" FontSize="12" Opacity="0.65"
TextWrapping="Wrap" Margin="4,4,12,0"/>
<Border Grid.Column="2" Grid.RowSpan="2" CornerRadius="4" Padding="7,3"
VerticalAlignment="Top"
Background="{DynamicResource SystemControlBackgroundAltHighBrush}">
<StackPanel>
<TextBlock Text="{Binding StatusText}" FontSize="11"
IsVisible="{Binding IsInvalid}" Foreground="IndianRed"/>
<TextBlock Text="Aktuell" FontSize="11" Opacity="0.5"
IsVisible="{Binding IsValid}"/>
</StackPanel>
</Border>
</Grid>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock Text="Keine Kontakte erfasst." Opacity="0.4"
HorizontalAlignment="Center" VerticalAlignment="Center"
IsVisible="{Binding HasNoContacts}"/>
</Grid>
</ContentPage>
<ContentPage Header="Noten">
<ScrollViewer Padding="20">
<StackPanel Spacing="20">
<TextBlock Text="Notenentwicklung" FontSize="15" FontWeight="SemiBold"/>
<ItemsControl ItemsSource="{Binding GradeHistory}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="vm:StudentGradeHistoryGroup">
<Border Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
CornerRadius="8" Padding="14,12" Margin="0,0,0,12">
<StackPanel Spacing="8">
<Grid ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Text="{Binding Label}" FontWeight="SemiBold" FontSize="13"/>
<Border Grid.Column="1" Background="#E53935" CornerRadius="4" Padding="6,1"
IsVisible="{Binding HasWarnings}">
<TextBlock Text="Auffälligkeiten" FontSize="10" Foreground="White"/>
</Border>
</Grid>
<ItemsControl ItemsSource="{Binding Points}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Spacing="10"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="vm:GradeHistoryPoint">
<StackPanel Width="46" VerticalAlignment="Bottom" ToolTip.Tip="{Binding TooltipText}">
<Border Classes="historybar" Height="{Binding BarHeight}" Width="16" CornerRadius="2"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
Classes.warning="{Binding IsWarning}"/>
<TextBlock Text="{Binding Value}" FontSize="11" FontWeight="SemiBold"
HorizontalAlignment="Center" Margin="0,3,0,0"/>
<TextBlock Text="{Binding DateDisplay}" FontSize="9" Opacity="0.5"
HorizontalAlignment="Center"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.Styles>
<Style Selector="Border.historybar">
<Setter Property="Background" Value="{DynamicResource SystemControlBackgroundAccentBrush}"/>
</Style>
<Style Selector="Border.historybar.warning">
<Setter Property="Background" Value="#E53935"/>
</Style>
</ItemsControl.Styles>
</ItemsControl>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="Noch keine Noten für diesen Schüler erfasst." Classes="emptyhint"
IsVisible="{Binding !GradeHistory.Count}"/>
</StackPanel>
</ScrollViewer>
</ContentPage>
<ContentPage Header="Dokumentation">
<ScrollViewer Padding="20">
<StackPanel>
<ItemsControl ItemsSource="{Binding Documentation}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="vm:DocEntry">
<Border Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
CornerRadius="6" Padding="12,10" Margin="0,0,0,8">
<Grid ColumnDefinitions="80,*,Auto">
<TextBlock Grid.Column="0" Text="{Binding Date}" Opacity="0.5" FontSize="12"/>
<StackPanel Grid.Column="1" Margin="8,0">
<TextBlock Text="{Binding Title}" FontWeight="SemiBold" FontSize="13"/>
<TextBlock Text="{Binding TypeLabel}" FontSize="11" Opacity="0.5"/>
</StackPanel>
<TextBlock Grid.Column="2" Text="🔒" FontSize="14"
IsVisible="{Binding IsConfidential}"
ToolTip.Tip="Vertraulich"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="Keine Dokumentation vorhanden." Opacity="0.4"
IsVisible="{Binding !Documentation.Count}"/>
</StackPanel>
</ScrollViewer>
</ContentPage>
</TabbedPage>
</Grid>
</UserControl>