UX-Update 2.0, Neues Dashboard

This commit is contained in:
2026-08-29 00:45:19 +02:00
parent 229ef79e75
commit 9b04d7eb98
14 changed files with 774 additions and 355 deletions
+85
View File
@@ -146,6 +146,20 @@
<ScrollViewer>
<StackPanel Classes="navitems" Margin="8,12,8,0" Spacing="2">
<Button Classes="navitem" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left" CornerRadius="6"
Click="OnOpenCommandPaletteClick"
ToolTip.Tip="Suchen und schnell erfassen (Strg/⌘+K)"
AutomationProperties.Name="Suchen und schnell erfassen">
<Grid ColumnDefinitions="Auto,*,Auto">
<TextBlock Classes="navicon" Text="⌕" TextAlignment="Center"/>
<TextBlock Grid.Column="1" Classes="navlabel" Text="Suchen / Erfassen"/>
<TextBlock Grid.Column="2" Classes="navlabel" Text="⌘K" FontSize="10" Opacity="0.45"
VerticalAlignment="Center"/>
</Grid>
</Button>
<Separator Margin="4,6"/>
<Button Classes="navitem" Classes.active="{Binding IsDashboardActive}" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Left"
CornerRadius="6"
@@ -241,6 +255,77 @@
</DrawerPage>
<!-- Globale Suche und Schnellerfassung (14.2). Bewusst als Overlay auf der aktuellen Seite:
Der Nutzer behält den Kontext und kann mit Escape ohne Navigation zurückkehren. -->
<Border Background="#A0000000" IsVisible="{Binding IsCommandPaletteOpen}"
AutomationProperties.Name="Globale Suche und Schnellerfassung">
<Grid>
<Button Background="Transparent" BorderThickness="0"
Command="{Binding CloseCommandPaletteCommand}"
AutomationProperties.Name="Suche schließen"/>
<Border Width="680" MaxHeight="570" Margin="24" Padding="0"
HorizontalAlignment="Center" VerticalAlignment="Top"
Background="{DynamicResource AppCardBackgroundBrush}"
BorderBrush="{DynamicResource AppCardBorderBrush}" BorderThickness="1"
CornerRadius="12">
<Grid RowDefinitions="Auto,Auto,*,Auto">
<Grid Grid.Row="0" ColumnDefinitions="Auto,*,Auto" Margin="18,16,18,10">
<TextBlock Text="⌕" FontSize="24" VerticalAlignment="Center" Margin="0,0,10,0"/>
<TextBox x:Name="CommandPaletteSearchBox" Grid.Column="1"
Text="{Binding CommandPalette.Query, UpdateSourceTrigger=PropertyChanged}"
PlaceholderText="Schüler, Lerngruppe, Klausur oder Aufgabe suchen …"
FontSize="16" BorderThickness="0" Background="Transparent"
AutomationProperties.Name="Suchbegriff"/>
<Button Grid.Column="2" Content="Esc" FontSize="10" Padding="8,3"
Command="{Binding CloseCommandPaletteCommand}"
AutomationProperties.Name="Suche schließen"/>
</Grid>
<Separator Grid.Row="1"/>
<ListBox Grid.Row="2" ItemsSource="{Binding CommandPalette.Results}"
SelectedItem="{Binding CommandPalette.SelectedResult}"
Background="Transparent" BorderThickness="0" Margin="8"
MaxHeight="420">
<ListBox.ItemTemplate>
<DataTemplate x:DataType="vm:GlobalSearchResult">
<Button Background="Transparent" BorderThickness="0" Padding="10,8"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
Command="{Binding $parent[Window].((vm:MainWindowViewModel)DataContext).CommandPalette.ExecuteCommand}"
CommandParameter="{Binding}">
<Grid ColumnDefinitions="38,*,Auto">
<Border Width="30" Height="30" CornerRadius="7"
Background="{DynamicResource AppAccentSoftBackgroundBrush}"
VerticalAlignment="Center">
<TextBlock Text="{Binding Icon}" FontWeight="SemiBold"
Foreground="{DynamicResource AppAccentOnSoftBrush}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Column="1" Margin="10,0">
<TextBlock Text="{Binding Title}" FontSize="14" FontWeight="SemiBold"/>
<TextBlock Text="{Binding Subtitle}" FontSize="11" Opacity="0.6"
TextTrimming="CharacterEllipsis"/>
</StackPanel>
<Border Grid.Column="2" Padding="7,3" CornerRadius="8"
Background="{DynamicResource AppChipBackgroundBrush}"
VerticalAlignment="Center">
<TextBlock Text="{Binding KindLabel}" FontSize="10" Opacity="0.7"/>
</Border>
</Grid>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock Grid.Row="2" Text="Keine passenden Ergebnisse."
Classes="emptyhint" HorizontalAlignment="Center" Margin="20"
IsVisible="{Binding CommandPalette.ShowNoResults}"/>
<Grid Grid.Row="3" ColumnDefinitions="*,Auto" Margin="18,8,18,14">
<TextBlock Text="↑↓ auswählen · Enter öffnen · Esc schließen" FontSize="10" Opacity="0.5"/>
<TextBlock Grid.Column="1" Text="Strg/⌘ + K" FontSize="10" Opacity="0.5"/>
</Grid>
</Grid>
</Border>
</Grid>
</Border>
<!-- Dauerhafte Meldung bei einer echten Protokoll-Inkompatibilität. Als Overlay außerhalb
von DrawerPage.Content bleibt der DataContext das MainWindowViewModel; innerhalb des
ContentPresenters würde eine fehlgeschlagene Bindung IsVisible auf true stehen lassen. -->