Desktop-Icons in eigene Kategorien sortieren: Windows-11-Design (hell/dunkel), Desktop-Boxen, automatisches Einsortieren nach Regeln, Rückgängig, Suche, Infobereich mit Tastenkürzel, Sicherung als ZIP und Installer ohne Adminrechte. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
626 lines
46 KiB
XML
626 lines
46 KiB
XML
<Window x:Class="DeskCore.MainWindow"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
|
||
Title="DeskCore" Icon="app.ico" Width="1120" Height="720" MinWidth="760" MinHeight="480"
|
||
Background="{DynamicResource BaseBrush}" Foreground="{DynamicResource TextBrush}"
|
||
FontFamily="{DynamicResource UiFont}" FontSize="14"
|
||
TextOptions.TextFormattingMode="Display" UseLayoutRounding="True"
|
||
WindowStartupLocation="CenterScreen">
|
||
|
||
<WindowChrome.WindowChrome>
|
||
<WindowChrome CaptionHeight="40" ResizeBorderThickness="6" GlassFrameThickness="0,0,0,1"
|
||
CornerRadius="0" UseAeroCaptionButtons="False"/>
|
||
</WindowChrome.WindowChrome>
|
||
|
||
<Window.Resources>
|
||
<!-- Kachelgrößen – werden je nach Ansicht im Code umgestellt -->
|
||
<sys:Double x:Key="TileWidth">108</sys:Double>
|
||
<sys:Double x:Key="TileHeight">116</sys:Double>
|
||
<sys:Double x:Key="TileIcon">48</sys:Double>
|
||
<Thickness x:Key="TileIconMargin">0,14,0,0</Thickness>
|
||
|
||
<!-- Eintrag in der Seitenleiste -->
|
||
<DataTemplate x:Key="NavTemplate">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Text="{Binding Glyph}" FontFamily="{DynamicResource IconFont}" FontSize="16"
|
||
VerticalAlignment="Center" Margin="0,0,14,0">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Foreground" Value="{Binding GlyphBrush}"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding GlyphBrush}" Value="{x:Null}">
|
||
<Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
<TextBlock Grid.Column="1" Text="{Binding Name}" TextTrimming="CharacterEllipsis" VerticalAlignment="Center"/>
|
||
<TextBlock Grid.Column="2" Text="" FontFamily="{DynamicResource IconFont}" FontSize="12" VerticalAlignment="Center"
|
||
Margin="8,0,0,0" Foreground="{DynamicResource TextTertiaryBrush}" ToolTip="Wird als Box auf dem Desktop angezeigt">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding HasFence}" Value="True">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
<TextBlock Grid.Column="3" Text="{Binding Count}" FontSize="12" Foreground="{DynamicResource TextTertiaryBrush}"
|
||
VerticalAlignment="Center" HorizontalAlignment="Right" Margin="8,0,0,0">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Style.Triggers>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True"/>
|
||
<Condition Binding="{Binding IsDesktop}" Value="False"/>
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Visibility" Value="Hidden"/>
|
||
</MultiDataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
<!-- Griff zum Umsortieren (nur beim Überfahren) -->
|
||
<TextBlock Grid.Column="3" Text="" FontFamily="{DynamicResource IconFont}" FontSize="14" Cursor="SizeNS"
|
||
Foreground="{DynamicResource TextSecondaryBrush}" VerticalAlignment="Center" HorizontalAlignment="Right"
|
||
ToolTip="Ziehen zum Umsortieren (oder Alt+↑/↓)">
|
||
<TextBlock.Style>
|
||
<Style TargetType="TextBlock">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<MultiDataTrigger>
|
||
<MultiDataTrigger.Conditions>
|
||
<Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True"/>
|
||
<Condition Binding="{Binding IsDesktop}" Value="False"/>
|
||
</MultiDataTrigger.Conditions>
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</MultiDataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</TextBlock.Style>
|
||
</TextBlock>
|
||
</Grid>
|
||
</DataTemplate>
|
||
|
||
<!-- Kachel -->
|
||
<DataTemplate x:Key="TileTemplate">
|
||
<StackPanel Width="{DynamicResource TileWidth}" Height="{DynamicResource TileHeight}" ToolTip="{Binding ToolTip}">
|
||
<Grid Width="{DynamicResource TileIcon}" Height="{DynamicResource TileIcon}" Margin="{DynamicResource TileIconMargin}">
|
||
<Image Source="{Binding Icon}" RenderOptions.BitmapScalingMode="HighQuality">
|
||
<Image.Style>
|
||
<Style TargetType="Image">
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding IsSorted}" Value="True">
|
||
<Setter Property="Opacity" Value="0.4"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Image.Style>
|
||
</Image>
|
||
<Border HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,-7,-5"
|
||
Width="20" Height="20" CornerRadius="10" Background="{DynamicResource SuccessBrush}"
|
||
BorderBrush="{DynamicResource LayerBrush}" BorderThickness="2">
|
||
<Border.Style>
|
||
<Style TargetType="Border">
|
||
<Setter Property="Visibility" Value="Collapsed"/>
|
||
<Style.Triggers>
|
||
<DataTrigger Binding="{Binding IsSorted}" Value="True">
|
||
<Setter Property="Visibility" Value="Visible"/>
|
||
</DataTrigger>
|
||
</Style.Triggers>
|
||
</Style>
|
||
</Border.Style>
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="9" Foreground="White"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||
</Border>
|
||
</Grid>
|
||
<TextBlock Text="{Binding Name}" FontSize="12" TextAlignment="Center" TextWrapping="Wrap"
|
||
TextTrimming="CharacterEllipsis" MaxHeight="34" LineHeight="16" Margin="6,9,6,0"/>
|
||
</StackPanel>
|
||
</DataTemplate>
|
||
|
||
<!-- Listenzeile -->
|
||
<DataTemplate x:Key="ListTemplate">
|
||
<Grid Height="40" Margin="14,0,10,0" ToolTip="{Binding ToolTip}">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="200"/>
|
||
<ColumnDefinition Width="160"/>
|
||
</Grid.ColumnDefinitions>
|
||
<Image Source="{Binding Icon}" Width="24" Height="24" Margin="0,0,14,0" RenderOptions.BitmapScalingMode="HighQuality"/>
|
||
<TextBlock Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock Grid.Column="2" Text="{Binding LocationText}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis"
|
||
Foreground="{DynamicResource TextSecondaryBrush}" FontSize="12"/>
|
||
<TextBlock Grid.Column="3" Text="{Binding TypeText}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis"
|
||
Foreground="{DynamicResource TextSecondaryBrush}" FontSize="12"/>
|
||
</Grid>
|
||
</DataTemplate>
|
||
|
||
<ItemsPanelTemplate x:Key="WrapPanelTemplate">
|
||
<WrapPanel/>
|
||
</ItemsPanelTemplate>
|
||
<ItemsPanelTemplate x:Key="StackPanelTemplate">
|
||
<VirtualizingStackPanel/>
|
||
</ItemsPanelTemplate>
|
||
|
||
<!-- Regelzeile in den Einstellungen -->
|
||
<DataTemplate x:Key="RuleTemplate">
|
||
<Grid Margin="0,0,0,8">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="200"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Text="Name enthält" VerticalAlignment="Center" Margin="0,0,12,0" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
<TextBox Grid.Column="1" Text="{Binding Contains, UpdateSourceTrigger=PropertyChanged}" LostFocus="RuleText_LostFocus"/>
|
||
<TextBlock Grid.Column="2" Text="" FontFamily="{DynamicResource IconFont}" FontSize="12" VerticalAlignment="Center"
|
||
Margin="12,0" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
<Button Grid.Column="3" HorizontalContentAlignment="Stretch" Click="RuleCategory_Click" Tag="{Binding}">
|
||
<DockPanel>
|
||
<TextBlock DockPanel.Dock="Right" Text="" FontFamily="{DynamicResource IconFont}" FontSize="10"
|
||
VerticalAlignment="Center" Margin="8,0,0,0"/>
|
||
<TextBlock Text="{Binding Category}" TextTrimming="CharacterEllipsis"/>
|
||
</DockPanel>
|
||
</Button>
|
||
<Button Grid.Column="4" Style="{StaticResource SubtleButton}" Margin="6,0,0,0" Click="RuleDelete_Click" Tag="{Binding}"
|
||
ToolTip="Regel entfernen">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="14"/>
|
||
</Button>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</Window.Resources>
|
||
|
||
<Grid x:Name="RootGrid">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="40"/>
|
||
<RowDefinition Height="*"/>
|
||
</Grid.RowDefinitions>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="280"/>
|
||
<ColumnDefinition Width="*"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- ===== Titelleiste ===== -->
|
||
<Grid Grid.ColumnSpan="2">
|
||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="16,0,0,0">
|
||
<Image Source="app.ico" Width="16" Height="16" RenderOptions.BitmapScalingMode="HighQuality"/>
|
||
<TextBlock Text="DeskCore" FontSize="12" Margin="12,0,0,0" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top">
|
||
<Button x:Name="ThemeButton" Style="{StaticResource CaptionButton}" FontSize="14" Click="ThemeButton_Click"
|
||
WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Design: Hell / Dunkel">
|
||
<Button.ContextMenu>
|
||
<ContextMenu x:Name="ThemeMenu" Placement="Bottom"/>
|
||
</Button.ContextMenu>
|
||
</Button>
|
||
<Button Style="{StaticResource CaptionButton}" Content="" Click="Minimize_Click"
|
||
WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Minimieren"/>
|
||
<Button x:Name="MaxButton" Style="{StaticResource CaptionButton}" Content="" Click="Maximize_Click"
|
||
WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Maximieren"/>
|
||
<Button Style="{StaticResource CloseCaptionButton}" Content="" Click="Close_Click"
|
||
WindowChrome.IsHitTestVisibleInChrome="True" ToolTip="Schließen"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
|
||
<!-- ===== Seitenleiste ===== -->
|
||
<DockPanel Grid.Row="1">
|
||
<ListBox x:Name="DesktopNav" DockPanel.Dock="Top" Margin="8,6,8,0"
|
||
ItemContainerStyle="{StaticResource NavItem}" ItemTemplate="{StaticResource NavTemplate}"
|
||
SelectionChanged="Nav_SelectionChanged"
|
||
AllowDrop="True" DragOver="Nav_DragOver" DragLeave="Nav_DragLeave" Drop="Nav_Drop"/>
|
||
|
||
<Grid DockPanel.Dock="Top" Margin="22,20,14,6">
|
||
<TextBlock Text="Kategorien" FontSize="12" FontWeight="SemiBold" Foreground="{DynamicResource TextSecondaryBrush}"
|
||
VerticalAlignment="Center" ToolTip="Reihenfolge ändern: Kategorie mit der Maus ziehen, Alt+↑/↓ oder Rechtsklick"/>
|
||
<Button Style="{StaticResource SubtleButton}" HorizontalAlignment="Right" Padding="6,4" MinHeight="0"
|
||
Click="NewCategory_Click" ToolTip="Neue Kategorie (Strg+N)">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="12"/>
|
||
</Button>
|
||
</Grid>
|
||
|
||
<StackPanel DockPanel.Dock="Bottom" Margin="8,8,8,12">
|
||
<Button Style="{StaticResource SubtleButton}" Padding="16,9" HorizontalContentAlignment="Left" Click="NewCategory_Click">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16" Margin="0,0,14,0"
|
||
VerticalAlignment="Center" Foreground="{DynamicResource AccentBrush}"/>
|
||
<TextBlock Text="Neue Kategorie" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Button>
|
||
<ListBox x:Name="SettingsNav" Margin="0,2,0,0" ItemContainerStyle="{StaticResource NavItem}"
|
||
SelectionChanged="SettingsNav_SelectionChanged">
|
||
<ListBoxItem>
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16" Margin="0,0,14,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Einstellungen" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</ListBoxItem>
|
||
</ListBox>
|
||
</StackPanel>
|
||
|
||
<Grid>
|
||
<ListBox x:Name="CategoryList" Margin="8,0"
|
||
ItemContainerStyle="{StaticResource NavItem}" ItemTemplate="{StaticResource NavTemplate}"
|
||
SelectionChanged="Nav_SelectionChanged"
|
||
PreviewMouseLeftButtonDown="CategoryList_PreviewMouseLeftButtonDown" PreviewMouseMove="CategoryList_PreviewMouseMove"
|
||
ContextMenuOpening="CategoryList_ContextMenuOpening"
|
||
AllowDrop="True" DragOver="Nav_DragOver" DragLeave="Nav_DragLeave" Drop="Nav_Drop">
|
||
<ListBox.ContextMenu>
|
||
<ContextMenu x:Name="CategoryMenu"/>
|
||
</ListBox.ContextMenu>
|
||
</ListBox>
|
||
<TextBlock x:Name="NoCategoriesText" Margin="24,8,24,0" TextWrapping="Wrap" FontSize="12"
|
||
Foreground="{DynamicResource TextTertiaryBrush}" IsHitTestVisible="False"
|
||
Text="Noch keine Kategorien. Lege unten deine erste an – z. B. „Spiele“, „Arbeit“ oder „Tools“."/>
|
||
</Grid>
|
||
</DockPanel>
|
||
|
||
<!-- ===== Inhalt ===== -->
|
||
<Border Grid.Row="1" Grid.Column="1" Background="{DynamicResource LayerBrush}"
|
||
BorderBrush="{DynamicResource LayerStrokeBrush}" BorderThickness="1,1,0,0" CornerRadius="8,0,0,0">
|
||
<Grid>
|
||
<DockPanel x:Name="BrowseView">
|
||
<!-- Kopfbereich -->
|
||
<Grid DockPanel.Dock="Top" Margin="36,26,30,0">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
<ColumnDefinition Width="Auto"/>
|
||
</Grid.ColumnDefinitions>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock x:Name="HeaderText" FontFamily="{DynamicResource DisplayFont}" FontSize="28" FontWeight="SemiBold"
|
||
TextTrimming="CharacterEllipsis"/>
|
||
<TextBlock x:Name="SubText" Foreground="{DynamicResource TextSecondaryBrush}" Margin="0,2,0,0"/>
|
||
</StackPanel>
|
||
<Grid Grid.Column="1" Width="280" VerticalAlignment="Center" Margin="24,0,0,0">
|
||
<TextBox x:Name="SearchBox" Padding="36,6,30,6" TextChanged="SearchBox_TextChanged"
|
||
ToolTip="Sucht in allen Kategorien und auf dem Desktop (Strg+F)"/>
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="14" IsHitTestVisible="False"
|
||
Foreground="{DynamicResource TextSecondaryBrush}" VerticalAlignment="Center" Margin="12,0,0,0"/>
|
||
<TextBlock x:Name="SearchPlaceholder" Text="Suchen" IsHitTestVisible="False" VerticalAlignment="Center"
|
||
Margin="37,0,0,0" Foreground="{DynamicResource TextTertiaryBrush}"/>
|
||
<Button x:Name="ClearSearchBtn" Style="{StaticResource SubtleButton}" HorizontalAlignment="Right" Margin="0,0,3,0"
|
||
Padding="6,4" MinHeight="0" Visibility="Collapsed" Click="ClearSearch_Click" ToolTip="Suche leeren (Esc)">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="10"/>
|
||
</Button>
|
||
</Grid>
|
||
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center" Margin="6,0,0,0">
|
||
<Button x:Name="UndoButton" Style="{StaticResource SubtleButton}" Padding="9" Click="Undo_Click" IsEnabled="False"
|
||
ToolTip="Rückgängig (Strg+Z)">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16"/>
|
||
</Button>
|
||
<Button x:Name="ViewButton" Style="{StaticResource SubtleButton}" Padding="9" Click="ViewButton_Click" ToolTip="Ansicht">
|
||
<TextBlock x:Name="ViewGlyph" Text="" FontFamily="{DynamicResource IconFont}" FontSize="16"/>
|
||
<Button.ContextMenu>
|
||
<ContextMenu x:Name="ViewMenu" Placement="Bottom"/>
|
||
</Button.ContextMenu>
|
||
</Button>
|
||
<Button Style="{StaticResource SubtleButton}" Padding="9" Click="Refresh_Click" ToolTip="Aktualisieren (F5)">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16"/>
|
||
</Button>
|
||
</StackPanel>
|
||
</Grid>
|
||
|
||
<!-- Befehlsleiste (nur bei Kategorien) -->
|
||
<StackPanel x:Name="CategoryCommands" DockPanel.Dock="Top" Orientation="Horizontal" Margin="30,14,30,6">
|
||
<Button Style="{StaticResource SubtleButton}" Click="EditCategory_Click" Margin="0,0,4,0">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Bearbeiten" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Button>
|
||
<Button x:Name="FenceToggleButton" Style="{StaticResource SubtleButton}" Click="FenceToggle_Click" Margin="0,0,4,0">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
||
<TextBlock x:Name="FenceToggleText" Text="Als Box auf den Desktop" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Button>
|
||
<Button Style="{StaticResource SubtleButton}" Click="OpenFolder_Click" Margin="0,0,4,0">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Im Explorer öffnen" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Button>
|
||
<Button Style="{StaticResource SubtleButton}" Click="DeleteCategory_Click">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="16" Margin="0,0,10,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Kategorie löschen" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
</Button>
|
||
</StackPanel>
|
||
|
||
<!-- Hinweis (InfoBar) -->
|
||
<Border x:Name="InfoBar" DockPanel.Dock="Top" Margin="36,20,36,8" Padding="16,12" CornerRadius="6"
|
||
Background="{DynamicResource AccentSubtleBrush}" BorderBrush="{DynamicResource AccentSubtleStrokeBrush}" BorderThickness="1">
|
||
<DockPanel>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18"
|
||
Foreground="{DynamicResource AccentBrush}" VerticalAlignment="Top" Margin="0,1,14,0"/>
|
||
<TextBlock TextWrapping="Wrap" LineHeight="20">
|
||
<Run FontWeight="SemiBold" Text="So räumst du auf:"/>
|
||
<Run Text="Ziehe Icons auf eine Kategorie links – sie werden dort gesichert. Icons mit"/>
|
||
<Run Foreground="{DynamicResource SuccessBrush}" FontWeight="SemiBold" Text="✓"/>
|
||
<Run Text="sind gesichert und können vom Desktop gelöscht werden (Rechtsklick → Vom Desktop löschen)."/>
|
||
</TextBlock>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<!-- Spaltenköpfe der Listenansicht -->
|
||
<Grid x:Name="ListHeader" DockPanel.Dock="Top" Margin="42,10,48,4" Visibility="Collapsed">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="*"/>
|
||
<ColumnDefinition Width="200"/>
|
||
<ColumnDefinition Width="160"/>
|
||
</Grid.ColumnDefinitions>
|
||
<TextBlock Text="Name" FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}" Margin="38,0,0,0"/>
|
||
<TextBlock Grid.Column="1" Text="Ort" FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
<TextBlock Grid.Column="2" Text="Typ" FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</Grid>
|
||
|
||
<!-- Kacheln / Liste -->
|
||
<Grid>
|
||
<ListBox x:Name="IconList" Padding="28,4,28,24" SelectionMode="Extended"
|
||
ItemContainerStyle="{StaticResource TileItem}" ItemTemplate="{StaticResource TileTemplate}"
|
||
ItemsPanel="{StaticResource WrapPanelTemplate}"
|
||
AllowDrop="True" Drop="IconList_Drop" DragOver="IconList_DragOver"
|
||
PreviewMouseLeftButtonDown="IconList_PreviewMouseLeftButtonDown" PreviewMouseMove="IconList_PreviewMouseMove"
|
||
MouseDoubleClick="IconList_MouseDoubleClick" KeyDown="IconList_KeyDown"
|
||
ContextMenuOpening="IconList_ContextMenuOpening">
|
||
<ListBox.ContextMenu>
|
||
<ContextMenu x:Name="IconMenu"/>
|
||
</ListBox.ContextMenu>
|
||
</ListBox>
|
||
|
||
<!-- Leerer Zustand -->
|
||
<StackPanel x:Name="EmptyState" HorizontalAlignment="Center" VerticalAlignment="Center" IsHitTestVisible="False"
|
||
Margin="0,0,0,60" MaxWidth="360">
|
||
<TextBlock x:Name="EmptyGlyph" FontFamily="{DynamicResource IconFont}" FontSize="48" HorizontalAlignment="Center"
|
||
Foreground="{DynamicResource TextTertiaryBrush}"/>
|
||
<TextBlock x:Name="EmptyTitle" FontSize="18" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,18,0,6"
|
||
FontFamily="{DynamicResource DisplayFont}"/>
|
||
<TextBlock x:Name="EmptyText" TextAlignment="Center" TextWrapping="Wrap" LineHeight="20"
|
||
Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</DockPanel>
|
||
|
||
<!-- ===== Einstellungen ===== -->
|
||
<ScrollViewer x:Name="SettingsView" Visibility="Collapsed" VerticalScrollBarVisibility="Auto">
|
||
<StackPanel Margin="36,26,36,36" MaxWidth="860" HorizontalAlignment="Stretch">
|
||
<TextBlock Text="Einstellungen" FontFamily="{DynamicResource DisplayFont}" FontSize="28" FontWeight="SemiBold"/>
|
||
|
||
<TextBlock Text="Darstellung" Style="{StaticResource SectionTitle}"/>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<Border DockPanel.Dock="Right" Style="{StaticResource SegmentGroup}" VerticalAlignment="Center">
|
||
<StackPanel Orientation="Horizontal">
|
||
<RadioButton x:Name="DesignLight" Style="{StaticResource SegmentRadio}" GroupName="Design" Content="Hell" Checked="Design_Checked"/>
|
||
<RadioButton x:Name="DesignDark" Style="{StaticResource SegmentRadio}" GroupName="Design" Content="Dunkel" Checked="Design_Checked"/>
|
||
<RadioButton x:Name="DesignSystem" Style="{StaticResource SegmentRadio}" GroupName="Design" Content="Wie Windows" Checked="Design_Checked"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Design"/>
|
||
<TextBlock Text="Helles oder dunkles Erscheinungsbild" FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<Border DockPanel.Dock="Right" Style="{StaticResource SegmentGroup}" VerticalAlignment="Center">
|
||
<StackPanel Orientation="Horizontal">
|
||
<RadioButton x:Name="ViewSmall" Style="{StaticResource SegmentRadio}" GroupName="View" Content="Klein" Checked="View_Checked"/>
|
||
<RadioButton x:Name="ViewMedium" Style="{StaticResource SegmentRadio}" GroupName="View" Content="Mittel" Checked="View_Checked"/>
|
||
<RadioButton x:Name="ViewLarge" Style="{StaticResource SegmentRadio}" GroupName="View" Content="Groß" Checked="View_Checked"/>
|
||
<RadioButton x:Name="ViewList" Style="{StaticResource SegmentRadio}" GroupName="View" Content="Liste" Checked="View_Checked"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Ansicht"/>
|
||
<TextBlock Text="Größe der Kacheln oder Listenansicht" FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<TextBlock Text="Start & Erreichbarkeit" Style="{StaticResource SectionTitle}"/>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<CheckBox x:Name="AutostartToggle" DockPanel.Dock="Right" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="AutostartToggle_Click"/>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Mit Windows starten"/>
|
||
<TextBlock Text="Startet unauffällig im Infobereich – Desktop-Boxen und Auto-Sortierung sind dann sofort aktiv" FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<CheckBox x:Name="TrayToggle" DockPanel.Dock="Right" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="TrayToggle_Click"/>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Symbol im Infobereich"/>
|
||
<TextBlock Text="Unten rechts neben der Uhr – Klick öffnet die App, Rechtsklick zeigt deine Kategorien" FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<CheckBox x:Name="CloseToTrayToggle" DockPanel.Dock="Right" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="CloseToTrayToggle_Click"/>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Beim Schließen weiterlaufen"/>
|
||
<TextBlock Text="Das X versteckt das Fenster nur – beenden über Rechtsklick auf das Infobereich-Symbol" FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" VerticalAlignment="Center">
|
||
<TextBox x:Name="HotkeyBox" Width="200" IsReadOnly="True" Margin="0,0,16,0" IsReadOnlyCaretVisible="False"
|
||
PreviewKeyDown="HotkeyBox_PreviewKeyDown" ToolTip="Hier klicken und neue Tastenkombination drücken"/>
|
||
<CheckBox x:Name="HotkeyToggle" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="HotkeyToggle_Click"/>
|
||
</StackPanel>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Tastenkürzel"/>
|
||
<TextBlock x:Name="HotkeyHint" Text="Öffnet die App von überall – ins Feld klicken und neue Kombination drücken" FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<TextBlock Text="Automatisch sortieren" Style="{StaticResource SectionTitle}"/>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<CheckBox x:Name="AutoSortToggle" DockPanel.Dock="Right" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="AutoSortToggle_Click"/>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Neue Desktop-Icons automatisch einsortieren"/>
|
||
<TextBlock Text="Sobald z. B. ein Installer eine Verknüpfung auf den Desktop legt, wird sie nach deinen Regeln gesichert" FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<CheckBox x:Name="AutoRemoveToggle" DockPanel.Dock="Right" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="AutoRemoveToggle_Click"/>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Danach vom Desktop entfernen"/>
|
||
<TextBlock Text="Das Original verschwindet vom Desktop (rückgängig machbar mit Strg+Z)" FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<StackPanel>
|
||
<TextBlock Text="Regeln" Margin="0,0,0,4"/>
|
||
<TextBlock Text="Die erste passende Regel gewinnt. Groß-/Kleinschreibung ist egal." FontSize="12"
|
||
Foreground="{DynamicResource TextSecondaryBrush}" Margin="0,0,0,14"/>
|
||
<ItemsControl x:Name="RulesList" ItemTemplate="{StaticResource RuleTemplate}"/>
|
||
<TextBlock x:Name="NoRulesText" Text="Noch keine Regeln." FontSize="12" Foreground="{DynamicResource TextTertiaryBrush}" Margin="0,0,0,12"/>
|
||
<StackPanel Orientation="Horizontal" Margin="0,4,0,0">
|
||
<Button Click="AddRule_Click" Margin="0,0,8,0">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="12" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Regel hinzufügen"/>
|
||
</StackPanel>
|
||
</Button>
|
||
<Button Click="ApplyRulesNow_Click" Content="Jetzt auf den Desktop anwenden"/>
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<TextBlock Text="Desktop-Boxen" Style="{StaticResource SectionTitle}"/>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<CheckBox x:Name="FencesToggle" DockPanel.Dock="Right" Style="{StaticResource ToggleSwitch}" VerticalAlignment="Center" Click="FencesToggle_Click"/>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Boxen auf dem Desktop anzeigen"/>
|
||
<TextBlock Text="Kategorien als verschiebbare Kästen direkt auf dem Desktop. Welche Kategorie eine Box bekommt, stellst du bei der Kategorie ein (Bearbeiten → „Als Box auf dem Desktop“). Doppelklick auf den Titel klappt eine Box ein." FontSize="12"
|
||
TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<TextBlock Text="Sicherung" Style="{StaticResource SectionTitle}"/>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" VerticalAlignment="Center">
|
||
<Button Click="Export_Click" Margin="0,0,8,0">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="14" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Sichern…"/>
|
||
</StackPanel>
|
||
</Button>
|
||
<Button Click="Import_Click">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="14" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Wiederherstellen…"/>
|
||
</StackPanel>
|
||
</Button>
|
||
</StackPanel>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="18" VerticalAlignment="Center" Margin="0,0,16,0"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock Text="Kategorien sichern & wiederherstellen"/>
|
||
<TextBlock x:Name="BackupHint" FontSize="12" TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
|
||
<TextBlock Text="Info" Style="{StaticResource SectionTitle}"/>
|
||
<Border Style="{StaticResource Card}">
|
||
<DockPanel>
|
||
<StackPanel DockPanel.Dock="Right" Orientation="Horizontal" VerticalAlignment="Center">
|
||
<Button Content="Lizenz" Click="License_Click" Margin="0,0,8,0"/>
|
||
<Button Content="Speicherort öffnen" Click="OpenStorage_Click" Margin="0,0,8,0"/>
|
||
<Button Click="Quit_Click">
|
||
<StackPanel Orientation="Horizontal">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="14" Margin="0,0,8,0" VerticalAlignment="Center"/>
|
||
<TextBlock Text="Beenden"/>
|
||
</StackPanel>
|
||
</Button>
|
||
</StackPanel>
|
||
<Image DockPanel.Dock="Left" Source="app.ico" Width="24" Height="24" Margin="0,0,16,0" VerticalAlignment="Center"/>
|
||
<StackPanel VerticalAlignment="Center">
|
||
<TextBlock x:Name="AboutTitle" Text="DeskCore"/>
|
||
<TextBlock x:Name="AboutCopyright" FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
<TextBlock x:Name="StoragePathText" FontSize="12" TextWrapping="Wrap" Foreground="{DynamicResource TextSecondaryBrush}"/>
|
||
</StackPanel>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border Style="{StaticResource Card}">
|
||
<StackPanel>
|
||
<TextBlock Text="Tastenkürzel in der App" Margin="0,0,0,8"/>
|
||
<TextBlock FontSize="12" Foreground="{DynamicResource TextSecondaryBrush}" LineHeight="20" TextWrapping="Wrap"
|
||
Text="Strg+F Suchen · Esc Suche leeren · Strg+A Alles markieren · Enter Öffnen · F2 Umbenennen · Entf Löschen · Strg+Z Rückgängig · Strg+N Neue Kategorie · Alt+↑/↓ Kategorie verschieben · F5 Aktualisieren · Strg+1…9 Kategorie wechseln"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
|
||
<!-- Rückmeldung (Toast) -->
|
||
<Border x:Name="Toast" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,24"
|
||
Padding="16,11" CornerRadius="8" Opacity="0" IsHitTestVisible="False"
|
||
Background="{DynamicResource FlyoutBrush}" BorderBrush="{DynamicResource FlyoutStrokeBrush}" BorderThickness="1"
|
||
Effect="{StaticResource FlyoutShadow}">
|
||
<Border.RenderTransform>
|
||
<TranslateTransform x:Name="ToastShift" Y="12"/>
|
||
</Border.RenderTransform>
|
||
<StackPanel Orientation="Horizontal">
|
||
<Border x:Name="ToastBadge" Width="20" Height="20" CornerRadius="10" Background="{DynamicResource SuccessBrush}" Margin="0,0,12,0">
|
||
<TextBlock x:Name="ToastGlyph" Text="" FontFamily="{DynamicResource IconFont}" FontSize="10" Foreground="White"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||
</Border>
|
||
<TextBlock x:Name="ToastText" VerticalAlignment="Center" MaxWidth="560" TextTrimming="CharacterEllipsis"/>
|
||
<Button x:Name="ToastUndo" Content="Rückgängig" Style="{StaticResource SubtleButton}" Margin="12,-4,-6,-4" Padding="10,4"
|
||
Foreground="{DynamicResource AccentBrush}" Click="Undo_Click" Visibility="Collapsed"/>
|
||
</StackPanel>
|
||
</Border>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- Abdunkeln bei offenem Dialog -->
|
||
<Border x:Name="DimOverlay" Grid.RowSpan="2" Grid.ColumnSpan="2" Background="{DynamicResource OverlayBrush}" Visibility="Collapsed"/>
|
||
</Grid>
|
||
</Window>
|