- Große Kopien laufen im Hintergrund mit Fortschritt und Abbrechen; abgebrochene Kopien werden aufgeräumt, das Original bleibt unverändert - Sichern/Wiederherstellen mit Fortschritt, keine halben ZIP-Dateien - Installer auf .NET Framework 4.8: erkennt fehlende .NET 9 Desktop Runtime und installiert sie auf Wunsch (Microsoft-Signatur wird geprüft) - Update-Hinweis über Gitea-Releases, Update mit automatischem Neustart - Fenstergröße und -position werden gemerkt - Desktop-Boxen: umbenennen, löschen, verschieben, herausziehen - Fenster und Boxen kehren auf sichtbare Bildschirme zurück - README ergänzt Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
184 lines
13 KiB
XML
184 lines
13 KiB
XML
<Window x:Class="DeskCoreSetup.MainWindow"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
Title="DeskCore Setup" Icon="app.ico" Width="720" Height="500" ResizeMode="CanMinimize"
|
||
Background="{DynamicResource BaseBrush}" Foreground="{DynamicResource TextBrush}"
|
||
FontFamily="{DynamicResource UiFont}" FontSize="14"
|
||
TextOptions.TextFormattingMode="Display" UseLayoutRounding="True"
|
||
WindowStartupLocation="CenterScreen">
|
||
|
||
<WindowChrome.WindowChrome>
|
||
<WindowChrome CaptionHeight="36" ResizeBorderThickness="0" GlassFrameThickness="0,0,0,1"
|
||
CornerRadius="0" UseAeroCaptionButtons="False"/>
|
||
</WindowChrome.WindowChrome>
|
||
|
||
<Window.Resources>
|
||
<Style x:Key="StepText" TargetType="TextBlock">
|
||
<Setter Property="Margin" Value="0,0,0,14"/>
|
||
<Setter Property="Foreground" Value="{DynamicResource TextTertiaryBrush}"/>
|
||
</Style>
|
||
<Style x:Key="PageTitle" TargetType="TextBlock">
|
||
<Setter Property="FontFamily" Value="{DynamicResource DisplayFont}"/>
|
||
<Setter Property="FontSize" Value="24"/>
|
||
<Setter Property="FontWeight" Value="SemiBold"/>
|
||
<Setter Property="Margin" Value="0,0,0,12"/>
|
||
</Style>
|
||
<Style x:Key="Body" TargetType="TextBlock">
|
||
<Setter Property="TextWrapping" Value="Wrap"/>
|
||
<Setter Property="LineHeight" Value="21"/>
|
||
<Setter Property="Foreground" Value="{DynamicResource TextSecondaryBrush}"/>
|
||
</Style>
|
||
</Window.Resources>
|
||
|
||
<Grid>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="36"/>
|
||
<RowDefinition Height="*"/>
|
||
<RowDefinition Height="Auto"/>
|
||
</Grid.RowDefinitions>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="220"/>
|
||
<ColumnDefinition Width="*"/>
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<!-- Titelleiste -->
|
||
<Grid Grid.ColumnSpan="2">
|
||
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="14,0,0,0">
|
||
<Image Source="app.ico" Width="16" Height="16" RenderOptions.BitmapScalingMode="HighQuality"/>
|
||
<TextBlock x:Name="WindowTitle" Text="DeskCore Setup" FontSize="12" Margin="10,0,0,0" VerticalAlignment="Center"/>
|
||
</StackPanel>
|
||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top">
|
||
<Button Style="{StaticResource CaptionButton}" Content="" Click="Minimize_Click"
|
||
WindowChrome.IsHitTestVisibleInChrome="True"/>
|
||
<Button x:Name="CloseButton" Style="{StaticResource CloseCaptionButton}" Content="" Click="Cancel_Click"
|
||
WindowChrome.IsHitTestVisibleInChrome="True"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
|
||
<!-- Seitenleiste mit Schritten -->
|
||
<StackPanel Grid.Row="1" Grid.RowSpan="2" Margin="28,18,20,20">
|
||
<Image Source="app.png" Width="72" Height="72" HorizontalAlignment="Left" RenderOptions.BitmapScalingMode="HighQuality"/>
|
||
<TextBlock Text="DeskCore" FontFamily="{DynamicResource DisplayFont}" FontSize="22" FontWeight="SemiBold" Margin="0,14,0,0"/>
|
||
<TextBlock x:Name="VersionText" Foreground="{DynamicResource TextSecondaryBrush}" FontSize="12" Margin="0,2,0,28"/>
|
||
<StackPanel x:Name="Steps">
|
||
<TextBlock x:Name="Step0" Text="Willkommen" Style="{StaticResource StepText}"/>
|
||
<TextBlock x:Name="Step1" Text="Lizenz" Style="{StaticResource StepText}"/>
|
||
<TextBlock x:Name="Step2" Text="Optionen" Style="{StaticResource StepText}"/>
|
||
<TextBlock x:Name="Step3" Text="Installation" Style="{StaticResource StepText}"/>
|
||
</StackPanel>
|
||
</StackPanel>
|
||
|
||
<!-- Inhalt -->
|
||
<Border Grid.Row="1" Grid.Column="1" Background="{DynamicResource LayerBrush}" BorderBrush="{DynamicResource LayerStrokeBrush}"
|
||
BorderThickness="1,1,0,1" CornerRadius="8,0,0,8" Padding="32,28,32,20">
|
||
<Grid>
|
||
<!-- 0: Willkommen -->
|
||
<StackPanel x:Name="PageWelcome">
|
||
<TextBlock Text="Willkommen bei DeskCore" Style="{StaticResource PageTitle}"/>
|
||
<TextBlock Style="{StaticResource Body}"
|
||
Text="DeskCore sortiert deine Desktop-Icons in eigene Kategorien – mit Suche, Desktop-Boxen, automatischem Einsortieren und Rückgängig-Funktion."/>
|
||
<TextBlock Style="{StaticResource Body}" Margin="0,14,0,0"
|
||
Text="Der Assistent installiert DeskCore nur für dein Benutzerkonto. Administratorrechte sind nicht nötig."/>
|
||
<Border x:Name="RuntimeHint" Margin="0,22,0,0" Padding="14,10" CornerRadius="6" Visibility="Collapsed"
|
||
Background="{DynamicResource ControlFillBrush}" BorderBrush="{DynamicResource ControlStrokeBrush}" BorderThickness="1">
|
||
<DockPanel>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="16"
|
||
Foreground="{DynamicResource AccentBrush}" Margin="0,2,12,0" VerticalAlignment="Top"/>
|
||
<TextBlock x:Name="RuntimeHintText" TextWrapping="Wrap" LineHeight="20"/>
|
||
</DockPanel>
|
||
</Border>
|
||
<Border x:Name="UpdateHint" Margin="0,22,0,0" Padding="14,10" CornerRadius="6" Visibility="Collapsed"
|
||
Background="{DynamicResource AccentSubtleBrush}" BorderBrush="{DynamicResource AccentSubtleStrokeBrush}" BorderThickness="1">
|
||
<DockPanel>
|
||
<TextBlock DockPanel.Dock="Left" Text="" FontFamily="{DynamicResource IconFont}" FontSize="16"
|
||
Foreground="{DynamicResource AccentBrush}" Margin="0,2,12,0" VerticalAlignment="Top"/>
|
||
<TextBlock x:Name="UpdateHintText" TextWrapping="Wrap" LineHeight="20"/>
|
||
</DockPanel>
|
||
</Border>
|
||
</StackPanel>
|
||
|
||
<!-- 1: Lizenz -->
|
||
<DockPanel x:Name="PageLicense" Visibility="Collapsed">
|
||
<TextBlock DockPanel.Dock="Top" Text="Lizenz- und Nutzungsbedingungen" Style="{StaticResource PageTitle}"/>
|
||
<CheckBox x:Name="AcceptLicense" DockPanel.Dock="Bottom" Margin="0,14,0,0" Click="AcceptLicense_Click"
|
||
Content="Ich akzeptiere die Lizenz- und Nutzungsbedingungen"/>
|
||
<Border Background="{DynamicResource ControlFillBrush}" BorderBrush="{DynamicResource ControlStrokeBrush}"
|
||
BorderThickness="1" CornerRadius="6">
|
||
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
||
<TextBlock x:Name="LicenseText" TextWrapping="Wrap" FontSize="12.5" LineHeight="18" Margin="14,10"/>
|
||
</ScrollViewer>
|
||
</Border>
|
||
</DockPanel>
|
||
|
||
<!-- 2: Optionen -->
|
||
<StackPanel x:Name="PageOptions" Visibility="Collapsed">
|
||
<TextBlock Text="Optionen" Style="{StaticResource PageTitle}"/>
|
||
<TextBlock Text="Installationsordner" FontWeight="SemiBold" FontSize="13" Margin="0,4,0,8"/>
|
||
<DockPanel>
|
||
<Button DockPanel.Dock="Right" Content="Ändern …" Margin="8,0,0,0" Click="ChangeDir_Click"/>
|
||
<TextBox x:Name="DirBox"/>
|
||
</DockPanel>
|
||
<CheckBox x:Name="DesktopLinkBox" Content="Verknüpfung auf dem Desktop" Margin="0,24,0,0" IsChecked="True"/>
|
||
<CheckBox x:Name="StartMenuBox" Content="Eintrag im Startmenü" Margin="0,12,0,0" IsChecked="True" IsEnabled="False"/>
|
||
<CheckBox x:Name="AutostartBox" Content="Mit Windows starten (unauffällig im Infobereich)" Margin="0,12,0,0"/>
|
||
<CheckBox x:Name="RuntimeBox" Margin="0,12,0,0" IsChecked="True" Visibility="Collapsed"
|
||
Content="Microsoft .NET 9 Desktop Runtime automatisch installieren (benötigt, ca. 55 MB)"/>
|
||
</StackPanel>
|
||
|
||
<!-- 3: Fortschritt / Fertig -->
|
||
<StackPanel x:Name="PageProgress" Visibility="Collapsed">
|
||
<TextBlock x:Name="ProgressTitle" Text="DeskCore wird installiert …" Style="{StaticResource PageTitle}"/>
|
||
<TextBlock x:Name="ProgressText" Style="{StaticResource Body}" Text="Einen Moment bitte."/>
|
||
<Border x:Name="ProgressTrack" Height="4" CornerRadius="2" Margin="0,22,0,0" Background="{DynamicResource SubtleSelectedBrush}">
|
||
<Border x:Name="ProgressFill" HorizontalAlignment="Left" Width="0" CornerRadius="2" Background="{DynamicResource AccentBrush}"/>
|
||
</Border>
|
||
<StackPanel x:Name="DonePanel" Visibility="Collapsed" Margin="0,26,0,0">
|
||
<StackPanel Orientation="Horizontal">
|
||
<Border Width="28" Height="28" CornerRadius="14" Background="{DynamicResource SuccessBrush}">
|
||
<TextBlock Text="" FontFamily="{DynamicResource IconFont}" FontSize="13" Foreground="White"
|
||
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
||
</Border>
|
||
<TextBlock x:Name="DoneText" VerticalAlignment="Center" Margin="12,0,0,0" FontWeight="SemiBold"/>
|
||
</StackPanel>
|
||
<Border x:Name="RuntimeMissing" Margin="0,18,0,0" Padding="14,10" CornerRadius="6" Visibility="Collapsed"
|
||
Background="{DynamicResource AccentSubtleBrush}" BorderBrush="{DynamicResource AccentSubtleStrokeBrush}" BorderThickness="1">
|
||
<StackPanel>
|
||
<TextBlock TextWrapping="Wrap" LineHeight="20"
|
||
Text="Damit DeskCore startet, wird noch die kostenlose „Microsoft .NET 9 Desktop Runtime“ benötigt."/>
|
||
<Button Content="Download-Seite von Microsoft öffnen" HorizontalAlignment="Left" Margin="0,10,0,0" Click="OpenRuntimePage_Click"/>
|
||
</StackPanel>
|
||
</Border>
|
||
<CheckBox x:Name="LaunchBox" Content="DeskCore jetzt starten" IsChecked="True" Margin="0,22,0,0"/>
|
||
</StackPanel>
|
||
</StackPanel>
|
||
|
||
<!-- Deinstallation -->
|
||
<StackPanel x:Name="PageUninstall" Visibility="Collapsed">
|
||
<TextBlock Text="DeskCore deinstallieren" Style="{StaticResource PageTitle}"/>
|
||
<TextBlock Style="{StaticResource Body}"
|
||
Text="DeskCore wird von deinem PC entfernt: Programm, Verknüpfungen, Autostart und der Eintrag in den Windows-Einstellungen."/>
|
||
<Border Margin="0,22,0,0" Padding="16,14" CornerRadius="6" Background="{DynamicResource ControlFillBrush}"
|
||
BorderBrush="{DynamicResource ControlStrokeBrush}" BorderThickness="1">
|
||
<StackPanel>
|
||
<TextBlock Text="Deine Kategorien bleiben standardmäßig erhalten" FontWeight="SemiBold"/>
|
||
<TextBlock x:Name="DataInfo" Style="{StaticResource Body}" FontSize="12.5" Margin="0,4,0,12"/>
|
||
<CheckBox x:Name="RemoveDataBox" Content="Auch Kategorien und Einstellungen entfernen (Papierkorb)"
|
||
Click="RemoveDataBox_Click"/>
|
||
<TextBlock x:Name="RemoveDataWarning" Visibility="Collapsed" Margin="30,8,0,0" TextWrapping="Wrap" FontSize="12.5"
|
||
Foreground="{DynamicResource DangerBrush}"
|
||
Text="Achtung: Dateien und Ordner, die nur noch in deinen Kategorien liegen, wandern damit in den Papierkorb."/>
|
||
</StackPanel>
|
||
</Border>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<!-- Fußleiste -->
|
||
<StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,14,20,18">
|
||
<Button x:Name="BackButton" Content="Zurück" Width="110" Margin="0,0,8,0" Click="Back_Click"/>
|
||
<Button x:Name="NextButton" Content="Weiter" Width="130" Margin="0,0,8,0" Style="{StaticResource AccentButton}" IsDefault="True" Click="Next_Click"/>
|
||
<Button x:Name="CancelButton" Content="Abbrechen" Width="110" Click="Cancel_Click"/>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Window>
|