625 lines
37 KiB
XML
625 lines
37 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">
|
||
|
||
<UserControl.Styles>
|
||
<Style Selector="TextBlock.overdue">
|
||
<Setter Property="Foreground" Value="Red"/>
|
||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||
</Style>
|
||
<Style Selector="Border.daycell.selected">
|
||
<Setter Property="Background" Value="{DynamicResource SystemControlBackgroundAccentBrush}"/>
|
||
<Setter Property="BorderThickness" Value="2"/>
|
||
<Setter Property="BorderBrush" Value="{DynamicResource SystemAccentColor}"/>
|
||
</Style>
|
||
</UserControl.Styles>
|
||
|
||
<ScrollViewer Padding="24">
|
||
<StackPanel Spacing="20">
|
||
|
||
<!-- Begrüßung -->
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<StackPanel>
|
||
<TextBlock Text="{Binding Greeting}" FontSize="14" Opacity="0.6"/>
|
||
<TextBlock Text="{Binding CurrentDate}" FontSize="24" FontWeight="SemiBold"/>
|
||
</StackPanel>
|
||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="8">
|
||
<Button Content="Klassenbuch abgleichen…" Click="OnCompareWebUntisDocumentationClick"
|
||
VerticalAlignment="Center"/>
|
||
<Button Content="Bereiche anpassen" Command="{Binding ToggleDashboardSettingsCommand}"
|
||
VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
|
||
<!-- Der Tagesfokus beantwortet zuerst die vier Fragen, die beim Öffnen der App zählen:
|
||
Was unterrichte ich, was ist zu tun, wo muss ich reagieren und was steht an? -->
|
||
<Border Background="{DynamicResource AppCardBackgroundBrush}"
|
||
BorderBrush="{DynamicResource AppCardBorderBrush}" BorderThickness="1"
|
||
CornerRadius="10" Padding="16,14">
|
||
<Grid ColumnDefinitions="*,*,*,*">
|
||
<StackPanel Grid.Column="0" Spacing="3">
|
||
<TextBlock Text="UNTERRICHT HEUTE" FontSize="10" FontWeight="Bold" Opacity="0.5"/>
|
||
<TextBlock Text="{Binding TodayLessonSummary}" FontSize="18" FontWeight="SemiBold"/>
|
||
</StackPanel>
|
||
<StackPanel Grid.Column="1" Spacing="3" Margin="18,0,0,0">
|
||
<TextBlock Text="AUFGABEN" FontSize="10" FontWeight="Bold" Opacity="0.5"/>
|
||
<TextBlock Text="{Binding OpenTaskSummary}" FontSize="18" FontWeight="SemiBold"/>
|
||
</StackPanel>
|
||
<StackPanel Grid.Column="2" Spacing="3" Margin="18,0,0,0">
|
||
<TextBlock Text="HANDLUNGSBEDARF" FontSize="10" FontWeight="Bold" Opacity="0.5"/>
|
||
<TextBlock Text="{Binding AttentionSummary}" FontSize="18" FontWeight="SemiBold"
|
||
Foreground="{DynamicResource AppStatusWarningBrush}"/>
|
||
</StackPanel>
|
||
<StackPanel Grid.Column="3" Spacing="3" Margin="18,0,0,0">
|
||
<TextBlock Text="NÄCHSTE 30 TAGE" FontSize="10" FontWeight="Bold" Opacity="0.5"/>
|
||
<TextBlock Text="{Binding UpcomingSummary}" FontSize="18" FontWeight="SemiBold"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<Border Background="{DynamicResource SystemControlBackgroundAltHighBrush}" CornerRadius="8"
|
||
Padding="12" IsVisible="{Binding IsDashboardSettingsOpen}">
|
||
<ItemsControl ItemsSource="{Binding DashboardCards}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate><WrapPanel Orientation="Horizontal"/></ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:DashboardCardOption">
|
||
<Border BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}"
|
||
BorderThickness="1" CornerRadius="6" Padding="8" Margin="4">
|
||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||
<CheckBox Content="{Binding Title}" IsChecked="{Binding IsVisible}" VerticalAlignment="Center"/>
|
||
<Button Content="↑" Padding="6,2"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).MoveCardUpCommand}"
|
||
CommandParameter="{Binding}"/>
|
||
<Button Content="↓" Padding="6,2"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).MoveCardDownCommand}"
|
||
CommandParameter="{Binding}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</Border>
|
||
|
||
<!-- Serverseitig gecachte DWD-Daten für den in den Einstellungen hinterlegten Schulstandort. -->
|
||
<Expander Header="{Binding WeatherSummary}" IsExpanded="{Binding HasWeatherWarnings}"
|
||
IsVisible="{Binding IsWeatherPanelVisible}"
|
||
Background="{DynamicResource AppCardBackgroundBrush}"
|
||
BorderBrush="{DynamicResource AppCardBorderBrush}" BorderThickness="1"
|
||
CornerRadius="8" Padding="12,6">
|
||
<StackPanel Spacing="10" Margin="6,8,6,6">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<StackPanel>
|
||
<TextBlock Text="WETTER AM SCHULSTANDORT" FontSize="11" FontWeight="Bold" Opacity="0.5"/>
|
||
<TextBlock Text="{Binding WeatherDetails}" FontSize="11" Opacity="0.65" TextWrapping="Wrap"
|
||
IsVisible="{Binding WeatherDetails, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||
</StackPanel>
|
||
<Button Grid.Column="1" Content="Aktualisieren" FontSize="11" Padding="8,3"
|
||
Command="{Binding RefreshCommand}" VerticalAlignment="Top"/>
|
||
</Grid>
|
||
<TextBlock Text="{Binding WeatherStatus}" FontSize="11" Opacity="0.65" TextWrapping="Wrap"
|
||
IsVisible="{Binding WeatherStatus, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||
<ItemsControl ItemsSource="{Binding WeatherWarnings}" IsVisible="{Binding HasWeatherWarnings}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:DashboardWeatherWarningItem">
|
||
<Border BorderBrush="{Binding SeverityColor}" BorderThickness="4,0,0,0"
|
||
Background="#14D32F2F" Padding="10" Margin="0,3" CornerRadius="4">
|
||
<StackPanel Spacing="3">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBlock Text="{Binding Headline}" FontSize="13" FontWeight="SemiBold" TextWrapping="Wrap"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding PeriodDisplay}" FontSize="10" Opacity="0.65"
|
||
Margin="10,0,0,0"/>
|
||
</Grid>
|
||
<TextBlock Text="{Binding Description}" FontSize="11" TextWrapping="Wrap"/>
|
||
<TextBlock Text="{Binding Instruction}" FontSize="11" Opacity="0.75" TextWrapping="Wrap"
|
||
IsVisible="{Binding Instruction, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Wetterdaten © Deutscher Wetterdienst" FontSize="10" Opacity="0.5"/>
|
||
</StackPanel>
|
||
</Expander>
|
||
|
||
<TextBlock Text="HEUTE UND HANDLUNGSBEDARF" FontSize="11" FontWeight="Bold" Opacity="0.5"
|
||
Margin="2,2,0,-8"/>
|
||
|
||
<Grid ColumnDefinitions="3*,2*" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto">
|
||
|
||
<!-- Heutige Stunden -->
|
||
<Border Grid.Column="{Binding TodayCard.Column}" Grid.Row="{Binding TodayCard.Row}"
|
||
IsVisible="{Binding TodayCard.EffectiveIsVisible}" Margin="0,0,8,8"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="Heute" FontSize="14" FontWeight="SemiBold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding TodaysLessons}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:LessonItem">
|
||
<Button Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenLessonCommand}"
|
||
CommandParameter="{Binding}"
|
||
Background="Transparent" BorderThickness="0" Padding="0" Margin="0,4"
|
||
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
|
||
<Grid ColumnDefinitions="4,*,Auto">
|
||
<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>
|
||
<StackPanel Grid.Column="2" HorizontalAlignment="Right" Margin="8,0,0,0">
|
||
<TextBlock Text="{Binding TimeDisplay}" FontSize="12" Opacity="0.7"
|
||
HorizontalAlignment="Right"
|
||
IsVisible="{Binding TimeDisplay, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||
<TextBlock Text="{Binding Room}" FontSize="11" Opacity="0.6"
|
||
HorizontalAlignment="Right" IsVisible="{Binding HasRoom}"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine Stunden heute" Classes="emptyhint"
|
||
IsVisible="{Binding !TodaysLessons.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Offene Aufgaben -->
|
||
<Border Grid.Column="{Binding TasksCard.Column}" Grid.Row="{Binding TasksCard.Row}"
|
||
IsVisible="{Binding TasksCard.EffectiveIsVisible}" Margin="8,0,0,8"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,0,0,10">
|
||
<TextBlock Grid.Column="0" Text="Offene Aufgaben" FontSize="14" FontWeight="SemiBold"
|
||
Opacity="0.5" VerticalAlignment="Center"/>
|
||
<Button Grid.Column="1" Content="🔔+" FontSize="12" Padding="7,2" Margin="0,0,4,0"
|
||
ToolTip.Tip="Erinnerung anlegen" Command="{Binding AddReminderCommand}"/>
|
||
<Button Grid.Column="2" Content="+" FontSize="12" Padding="8,2"
|
||
ToolTip.Tip="Aufgabe anlegen" Command="{Binding AddTaskCommand}"/>
|
||
</Grid>
|
||
<ItemsControl ItemsSource="{Binding OpenTasks}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:TaskItem">
|
||
<Grid ColumnDefinitions="4,Auto,*,Auto" Margin="0,3">
|
||
<Border Grid.Column="0" Background="#D32F2F" CornerRadius="2" Margin="0,0,6,0"
|
||
IsVisible="{Binding IsHighPriority}" ToolTip.Tip="Hohe Priorität"/>
|
||
<TextBlock Grid.Column="1" Text="🔔" FontSize="12" Margin="0,0,4,0"
|
||
IsVisible="{Binding IsReminder}"
|
||
ToolTip.Tip="Erinnerung — kein Zeitbezug"/>
|
||
<TextBlock Grid.Column="2" Text="{Binding Title}"
|
||
FontSize="13" TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Grid.Column="3" Text="{Binding DueDate}"
|
||
FontSize="12" Opacity="0.6" Margin="8,0,0,0"/>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine offenen Aufgaben" Classes="emptyhint"
|
||
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="{Binding CalendarCard.Column}" Grid.Row="{Binding CalendarCard.Row}"
|
||
IsVisible="{Binding CalendarCard.EffectiveIsVisible}" Margin="0,0,8,8"
|
||
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">
|
||
<Button Background="Transparent" BorderThickness="0" Padding="0" Margin="1"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).SelectCalendarDayCommand}"
|
||
CommandParameter="{Binding}" ToolTip.Tip="{Binding Tooltip}">
|
||
<Border Classes="daycell" Classes.ownclass="{Binding IsOwnClassDay}"
|
||
Classes.haslesson="{Binding HasLesson}"
|
||
Classes.outside="{Binding !IsCurrentMonth}"
|
||
Classes.selected="{Binding IsSelected}"
|
||
Width="32" Height="32" CornerRadius="6">
|
||
<Grid>
|
||
<TextBlock Classes="daynum" Classes.today="{Binding IsToday}"
|
||
Text="{Binding DayNumber}" FontSize="12"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||
<StackPanel Orientation="Horizontal" Spacing="2" Margin="0,0,0,3"
|
||
HorizontalAlignment="Center" VerticalAlignment="Bottom">
|
||
<Ellipse Width="5" Height="5" Fill="#1E88E5" IsVisible="{Binding HasSession}"/>
|
||
<Ellipse Width="5" Height="5" Fill="#E53935" IsVisible="{Binding HasExam}"/>
|
||
<Ellipse Width="5" Height="5" Fill="#FF8A00" IsVisible="{Binding HasAnnualPlanEvent}"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
|
||
<WrapPanel Orientation="Horizontal" Margin="0,4,0,0">
|
||
<StackPanel Orientation="Horizontal" Spacing="4" Margin="0,0,14,4">
|
||
<Border Width="10" Height="10" CornerRadius="3" Background="#14808080"/>
|
||
<TextBlock Text="Unterricht" FontSize="10" Opacity="0.6"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" Spacing="4" Margin="0,0,14,4">
|
||
<Ellipse Width="7" Height="7" Fill="#E53935"/>
|
||
<TextBlock Text="Klausur" FontSize="10" Opacity="0.6"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" Spacing="4" Margin="0,0,14,4">
|
||
<Ellipse Width="7" Height="7" Fill="#1E88E5"/>
|
||
<TextBlock Text="Sitzung" FontSize="10" Opacity="0.6"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" Spacing="4" Margin="0,0,14,4">
|
||
<Ellipse Width="7" Height="7" Fill="#FF8A00"/>
|
||
<TextBlock Text="Jahresplan" FontSize="10" Opacity="0.6"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" Spacing="4" Margin="0,0,14,4">
|
||
<Border Width="10" Height="10" CornerRadius="3" BorderThickness="2"
|
||
BorderBrush="{DynamicResource SystemControlBackgroundAccentBrush}"/>
|
||
<TextBlock Text="Meine Klasse" FontSize="10" Opacity="0.6"/>
|
||
</StackPanel>
|
||
</WrapPanel>
|
||
|
||
<Separator Margin="0,4"/>
|
||
<TextBlock Text="{Binding SelectedDayLabel}" FontWeight="SemiBold" FontSize="12"/>
|
||
<ItemsControl ItemsSource="{Binding SelectedDayEvents}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:CalendarEventItem">
|
||
<Button Background="Transparent" BorderThickness="0" Padding="0" Margin="0,3"
|
||
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenCalendarEventCommand}"
|
||
CommandParameter="{Binding}">
|
||
<Grid ColumnDefinitions="Auto,*">
|
||
<TextBlock Text="{Binding KindLabel}" FontSize="10" Opacity="0.55" Width="58"/>
|
||
<StackPanel Grid.Column="1">
|
||
<TextBlock Text="{Binding Title}" FontSize="12" FontWeight="SemiBold"/>
|
||
<TextBlock Text="{Binding Subtitle}" FontSize="10" Opacity="0.6"/>
|
||
<TextBlock Text="{Binding Description}" FontSize="10" Opacity="0.6"
|
||
TextWrapping="Wrap"
|
||
IsVisible="{Binding Description, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine Termine an diesem Tag." Classes="emptyhint"
|
||
IsVisible="{Binding !SelectedDayEvents.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Offene Entschuldigungen: neben dem Kalender, ebenfalls feste Position -->
|
||
<Border Grid.Column="{Binding ExcusesCard.Column}" Grid.Row="{Binding ExcusesCard.Row}"
|
||
IsVisible="{Binding ExcusesCard.EffectiveIsVisible}" 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." Classes="emptyhint"
|
||
IsVisible="{Binding !OpenExcuses.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Fehlzeiten-Warnung (5.2.3) -->
|
||
<Border Grid.Column="{Binding AttendanceCard.Column}" Grid.Row="{Binding AttendanceCard.Row}"
|
||
IsVisible="{Binding AttendanceCard.EffectiveIsVisible}" Margin="0,0,8,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="FEHLZEITEN-WARNUNG" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding AttendanceWarnings}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:AttendanceWarningItem">
|
||
<Grid ColumnDefinitions="*,Auto" Margin="0,4">
|
||
<Button Grid.Column="0" Content="{Binding StudentName}" FontSize="13"
|
||
HorizontalAlignment="Left" HorizontalContentAlignment="Left"
|
||
Background="Transparent" Padding="0"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenStudentAttendanceCommand}"
|
||
CommandParameter="{Binding}"/>
|
||
<TextBlock Grid.Column="1" Foreground="Red" FontSize="12" VerticalAlignment="Center">
|
||
<Run Text="{Binding AbsenceRatePercent}"/>
|
||
<Run Text=" %"/>
|
||
</TextBlock>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine Fehlzeiten über dem Schwellenwert." Classes="emptyhint"
|
||
IsVisible="{Binding !AttendanceWarnings.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Förderplan-Wiedervorlage (5.3.2) -->
|
||
<Border Grid.Column="{Binding SupportCard.Column}" Grid.Row="{Binding SupportCard.Row}"
|
||
IsVisible="{Binding SupportCard.EffectiveIsVisible}" Margin="8,0,0,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="FÖRDERPLAN-WIEDERVORLAGE" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding SupportPlanReviews}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate DataType="vm:SupportPlanDueItem">
|
||
<Grid ColumnDefinitions="*,Auto" Margin="0,4">
|
||
<StackPanel Grid.Column="0">
|
||
<Button Content="{Binding StudentName}" FontSize="13" FontWeight="SemiBold"
|
||
HorizontalAlignment="Left" HorizontalContentAlignment="Left"
|
||
Background="Transparent" Padding="0"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenStudentSupportPlanCommand}"
|
||
CommandParameter="{Binding}"/>
|
||
<TextBlock Text="{Binding Title}" FontSize="11" Opacity="0.6"/>
|
||
</StackPanel>
|
||
<TextBlock Grid.Column="1" Text="{Binding ReviewDateDisplay}" FontSize="12"
|
||
VerticalAlignment="Center" Classes.overdue="{Binding IsOverdue}"/>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine fälligen Überprüfungen." Classes="emptyhint"
|
||
IsVisible="{Binding !SupportPlanReviews.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Anstehende Termine (9.3) -->
|
||
<Border Grid.Column="{Binding UpcomingCard.Column}" Grid.Row="{Binding UpcomingCard.Row}"
|
||
IsVisible="{Binding UpcomingCard.EffectiveIsVisible}" Margin="0,0,8,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="ANSTEHENDE TERMINE" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding UpcomingDates}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:UpcomingDateItem">
|
||
<Button Background="Transparent" BorderThickness="0" Padding="0" Margin="0,4"
|
||
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenUpcomingDateCommand}"
|
||
CommandParameter="{Binding}">
|
||
<Grid ColumnDefinitions="Auto,*,Auto">
|
||
<Border Background="{DynamicResource SystemAccentColorLight2}" CornerRadius="4"
|
||
Padding="5,2" VerticalAlignment="Center">
|
||
<TextBlock Text="{Binding KindLabel}" FontSize="10"/>
|
||
</Border>
|
||
<StackPanel Grid.Column="1" Margin="8,0">
|
||
<TextBlock Text="{Binding Title}" FontSize="13" FontWeight="SemiBold"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Text="{Binding Subtitle}" FontSize="11" Opacity="0.6"/>
|
||
</StackPanel>
|
||
<TextBlock Grid.Column="2" Text="{Binding DateDisplay}" FontSize="12"
|
||
VerticalAlignment="Center" Classes.overdue="{Binding IsOverdue}"/>
|
||
</Grid>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine Termine in den nächsten 30 Tagen." Classes="emptyhint"
|
||
IsVisible="{Binding !UpcomingDates.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Offene Korrekturen (9.4) -->
|
||
<Border Grid.Column="{Binding CorrectionsCard.Column}" Grid.Row="{Binding CorrectionsCard.Row}"
|
||
IsVisible="{Binding CorrectionsCard.EffectiveIsVisible}" Margin="8,0,0,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="OFFENE KORREKTUREN" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding OpenCorrections}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:CorrectionProgressItem">
|
||
<Button Background="Transparent" BorderThickness="0" Padding="0" Margin="0,5"
|
||
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenCorrectionCommand}"
|
||
CommandParameter="{Binding}">
|
||
<StackPanel Spacing="3">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBlock Text="{Binding Title}" FontSize="13" FontWeight="SemiBold"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding DateDisplay}" FontSize="11" Opacity="0.6"/>
|
||
</Grid>
|
||
<TextBlock Text="{Binding GroupName}" FontSize="11" Opacity="0.6"/>
|
||
<ProgressBar Minimum="0" Maximum="100" Value="{Binding Percent}" Height="6"/>
|
||
<TextBlock Text="{Binding ProgressDisplay}" FontSize="10" Opacity="0.65"/>
|
||
</StackPanel>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine offenen Korrekturen." Classes="emptyhint"
|
||
IsVisible="{Binding !OpenCorrections.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Ungeplante Stunden -->
|
||
<Border Grid.Column="{Binding UnplannedCard.Column}" Grid.Row="{Binding UnplannedCard.Row}"
|
||
IsVisible="{Binding UnplannedCard.EffectiveIsVisible}" Margin="0,0,8,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="UNGEPLANTE STUNDEN" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding UnplannedLessons}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:UnplannedLessonItem">
|
||
<Button Background="Transparent" BorderThickness="0" Padding="0" Margin="0,5"
|
||
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenUnplannedLessonCommand}"
|
||
CommandParameter="{Binding}">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBlock Text="{Binding Display}" FontSize="13"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding DateDisplay}" FontSize="12"
|
||
VerticalAlignment="Center" Opacity="0.6"/>
|
||
</Grid>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine ungeplanten Stunden." Classes="emptyhint"
|
||
IsVisible="{Binding !UnplannedLessons.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Auffälligkeiten (9.5) -->
|
||
<Border Grid.Column="{Binding AlertsCard.Column}" Grid.Row="{Binding AlertsCard.Row}"
|
||
IsVisible="{Binding AlertsCard.EffectiveIsVisible}" Margin="0,0,8,8" VerticalAlignment="Top"
|
||
Background="{DynamicResource SystemControlBackgroundAltHighBrush}"
|
||
CornerRadius="8" Padding="16">
|
||
<StackPanel>
|
||
<TextBlock Text="AUFFÄLLIGKEITEN" FontSize="11" FontWeight="Bold"
|
||
Opacity="0.5" Margin="0,0,0,10"/>
|
||
<ItemsControl ItemsSource="{Binding Alerts}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:DashboardAlertItem">
|
||
<Button Background="Transparent" BorderThickness="0" Padding="0" Margin="0,4"
|
||
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
|
||
Command="{Binding $parent[ItemsControl].((vm:DashboardViewModel)DataContext).OpenAlertCommand}"
|
||
CommandParameter="{Binding}">
|
||
<Grid ColumnDefinitions="4,*">
|
||
<Border Background="{Binding SeverityColor}" CornerRadius="2" Margin="0,0,9,0"/>
|
||
<StackPanel Grid.Column="1">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBlock Text="{Binding StudentName}" FontSize="13" FontWeight="SemiBold"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding KindLabel}" FontSize="10" Opacity="0.6"/>
|
||
</Grid>
|
||
<TextBlock Text="{Binding Detail}" FontSize="11" Opacity="0.65"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Button>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock Text="Keine Auffälligkeiten erkannt." Classes="emptyhint"
|
||
IsVisible="{Binding !Alerts.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<!-- Meine Lerngruppen -->
|
||
<Border Grid.Column="{Binding GroupsCard.Column}" Grid.Row="{Binding GroupsCard.Row}"
|
||
IsVisible="{Binding GroupsCard.EffectiveIsVisible}"
|
||
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}" HorizontalAlignment="Stretch">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" ItemSpacing="8" LineSpacing="8"/>
|
||
</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" MinWidth="150"
|
||
ToolTip.Tip="Kurs öffnen">
|
||
<StackPanel>
|
||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||
<Border Width="6" Height="6" CornerRadius="3"
|
||
Background="{DynamicResource SystemAccentColor}"
|
||
IsVisible="{Binding IsOnSelectedDay}" VerticalAlignment="Center"/>
|
||
<TextBlock Text="{Binding Name}" FontWeight="SemiBold" FontSize="13"/>
|
||
</StackPanel>
|
||
<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." Classes="emptyhint"
|
||
IsVisible="{Binding !CurrentGroups.Count}"/>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
</Grid>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
</UserControl>
|