mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-21 16:14:28 +08:00
2.7 KiB
2.7 KiB
Tasks
-
Task 1: 在
AppSettingsSnapshot中添加EnableSlideTransition字段- 添加
public bool EnableSlideTransition { get; set; } = false; - 在
Clone()方法中无需特殊处理(bool 是值类型)
- 添加
-
Task 2: 在
MainWindow.axaml的DesktopPage上添加TranslateTransform和过渡动画- 添加
<TranslateTransform /> - 在
Grid.Transitions中添加TranslateTransform.X的DoubleTransition,使用FluttermotionToken.Duration.Intro和 DecelerateBezier 缓动
- 添加
-
Task 3: 在
MainWindow.axaml.cs中实现退场动画逻辑- 添加
_isSlideAnimationActive标志位 - 修改
OnMinimizeClick,调用新的SlideOutAndMinimizeAsync方法 - 实现
SlideOutAndMinimizeAsync:读取设置 → 播放退场动画(Opacity + 可选滑动)→ 等动画完成 → 最小化 → 重置位置 - 动画期间设置
DesktopPage.IsHitTestVisible = false
- 添加
-
Task 4: 在
MainWindow.axaml.cs中实现入场动画逻辑- 添加
public void PrepareEnterAnimation()方法:禁用过渡 → 设置初始位置(Opacity=0, X=屏幕宽度或0)→ 重新启用过渡 - 添加
public void PlayEnterAnimation()方法:触发入场动画(Opacity=1, X=0) - 添加
private bool IsSlideTransitionEnabled()方法,从设置中读取
- 添加
-
Task 5: 修改
App.axaml.cs的RestoreOrCreateMainWindow- 在窗口状态切换前调用
mainWindow.PrepareEnterAnimation() - 在 FullScreen 状态生效后调用
mainWindow.PlayEnterAnimation()
- 在窗口状态切换前调用
-
Task 6: 修改
MainWindow.axaml.cs的OnWindowPropertyChanged- 当
_isSlideAnimationActive为 true 时跳过强制全屏逻辑
- 当
-
Task 7: 在
GeneralSettingsPageViewModel中添加EnableSlideTransition属性- 添加
[ObservableProperty] private bool _enableSlideTransition; - 添加
OnEnableSlideTransitionChanged持久化方法 - 在构造函数和
OnSettingsChanged中加载/同步该设置 - 添加
IsSlideTransitionAvailable平台检测属性
- 添加
-
Task 8: 在
GeneralSettingsPage.axaml中添加"滑入滑出过渡效果"开关- 在"运行时设置"分组中添加
SettingsExpander - 仅 Windows 平台显示(使用
IsVisible绑定到IsSlideTransitionAvailable) - 图标使用
ArrowRight
- 在"运行时设置"分组中添加
-
Task 9: 构建验证
- 执行
dotnet build确保无编译错误
- 执行
Task Dependencies
- [Task 2] depends on [Task 1]
- [Task 3] depends on [Task 1, Task 2]
- [Task 4] depends on [Task 1, Task 2]
- [Task 5] depends on [Task 4]
- [Task 6] depends on [Task 3]
- [Task 7] depends on [Task 1]
- [Task 8] depends on [Task 7]
- [Task 9] depends on [Task 3, Task 4, Task 5, Task 6, Task 7, Task 8]