diff --git a/PCL.Neo/ViewModels/DownloadViewModel.cs b/PCL.Neo/ViewModels/DownloadViewModel.cs index ca52e703..1f635fec 100644 --- a/PCL.Neo/ViewModels/DownloadViewModel.cs +++ b/PCL.Neo/ViewModels/DownloadViewModel.cs @@ -36,12 +36,12 @@ private void NavigateToDownloadMod() [RelayCommand] private void Btn_Test1() { - Message = "I am from DownloadViewModel Test1"; + Message = "I am from DownloadViewModel ੭ ˙ᗜ˙ )੭"; } [RelayCommand] private void Btn_Test2() { - Message = "I am from DownloadViewModel Test2"; + Message = "I am from DownloadViewModel (⚭-⚭ ) ੭"; } } \ No newline at end of file diff --git a/PCL.Neo/Views/DownloadView.axaml b/PCL.Neo/Views/DownloadView.axaml index c266a527..d2c15a78 100644 --- a/PCL.Neo/Views/DownloadView.axaml +++ b/PCL.Neo/Views/DownloadView.axaml @@ -6,8 +6,7 @@ xmlns:vm="using:PCL.Neo.ViewModels" mc:Ignorable="d" d:DesignWidth="150" d:DesignHeight="450" x:Class="PCL.Neo.Views.DownloadView" - x:DataType="vm:DownloadViewModel" - Width="170"> + x:DataType="vm:DownloadViewModel"> diff --git a/PCL.Neo/Views/HomeView.axaml b/PCL.Neo/Views/HomeView.axaml index 03d1dbf8..1ef5cfe5 100644 --- a/PCL.Neo/Views/HomeView.axaml +++ b/PCL.Neo/Views/HomeView.axaml @@ -6,8 +6,7 @@ xmlns:home="clr-namespace:PCL.Neo.ViewModels.Home" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="250" x:Class="PCL.Neo.Views.HomeView" - x:DataType="home:HomeSubViewModel" - Width="250"> - Welcome to Avalonia!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + x:DataType="home:HomeSubViewModel"> + This is part of HomeView!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/PCL.Neo/Views/MainWindow.axaml b/PCL.Neo/Views/MainWindow.axaml index c236e9f4..f8fda36c 100644 --- a/PCL.Neo/Views/MainWindow.axaml +++ b/PCL.Neo/Views/MainWindow.axaml @@ -223,18 +223,26 @@ ColumnDefinitions="Auto, *" Grid.Row="1" Name="PanMain"> - + + Width="0" + ZIndex="1"> + + + + + + { - LeftNavigationControlBorder.Width = LeftNavigationControl.Presenter!.Child?.Width ?? 0d; - AnimationHelper? lastAnimation = null; - LeftNavigationControl.Presenter!.PropertyChanged += async (_, e) => + LeftNavigationControlBorder.Width = LeftNavigationControl!.Bounds.Width; + + LeftNavigationControl!.SizeChanged += (_, args) => { - if (e.Property != ContentPresenter.ChildProperty) - return; - var oldValue = e.OldValue as Control; - var newValue = e.NewValue as Control; - lastAnimation?.CancelAndClear(); - var previousScaleTransform = - (LeftNavigationControlBorder.RenderTransform as TransformGroup)?.Children - .FirstOrDefault(x => x is ScaleTransform) as ScaleTransform; - var previousScaleX = previousScaleTransform?.ScaleX ?? 1d; - LeftNavigationControlBorder.Width = LeftNavigationControl.Presenter!.Child?.Width ?? 0d; - var scale = oldValue?.Width / newValue?.Width * previousScaleX ?? 1d; - lastAnimation = new AnimationHelper( - [ - new ScaleTransformScaleXAnimation(LeftNavigationControlBorder, TimeSpan.FromMilliseconds(300), scale, - 1d, new CubicEaseOut()) - ]); - await lastAnimation.RunAsync(); + if (args.WidthChanged) + LeftNavigationControlBorder.Width = args.NewSize.Width; }; }; // 获取导航控件的CompositionVisual,用于动画 _leftNavigationControlVisual = ElementComposition.GetElementVisual(LeftNavigationControl); _rightNavigationControlVisual = ElementComposition.GetElementVisual(RightNavigationControl); - - if (_leftNavigationControlVisual != null) + + if (_leftNavigationControlVisual != null) { _compositor = _leftNavigationControlVisual.Compositor; - + // 订阅导航事件 - this.Loaded += (_, _) => + this.Loaded += (_, _) => { if (DataContext is MainWindowViewModel viewModel) { viewModel.NavigationService.Navigating += OnNavigating; } }; - - this.Unloaded += (_, _) => + + this.Unloaded += (_, _) => { if (DataContext is MainWindowViewModel viewModel) { @@ -117,12 +102,12 @@ public MainWindow() GridRoot.Opacity = 0; // 在此处初始化透明度,不然将闪现 this.Loaded += (_, _) => AnimationIn(); } - + private void OnNavigating(NavigationEventArgs e) { if (_compositor == null || _leftNavigationControlVisual == null || _rightNavigationControlVisual == null) return; - + // 导航动画效果 if (e.NavigationType == NavigationType.Forward) { @@ -135,91 +120,91 @@ private void OnNavigating(NavigationEventArgs e) PlayBackwardNavigationAnimation(); } } - + private void PlayForwardNavigationAnimation() { if (_compositor == null || _leftNavigationControlVisual == null || _rightNavigationControlVisual == null) return; - + // 左侧面板动画 - 从左滑入 var leftOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); leftOffsetAnimation.Duration = TimeSpan.FromMilliseconds(300); leftOffsetAnimation.InsertKeyFrame(0f, new Vector3(-50f, 0f, 0f), new CubicEaseOut()); leftOffsetAnimation.InsertKeyFrame(1f, new Vector3(0f, 0f, 0f), new CubicEaseOut()); leftOffsetAnimation.Target = "Offset"; - + var leftOpacityAnimation = _compositor.CreateScalarKeyFrameAnimation(); leftOpacityAnimation.Duration = TimeSpan.FromMilliseconds(300); leftOpacityAnimation.InsertKeyFrame(0f, 0f, new CubicEaseOut()); leftOpacityAnimation.InsertKeyFrame(1f, 1f, new CubicEaseOut()); leftOpacityAnimation.Target = "Opacity"; - + // 右侧面板动画 - 从右滑入 var rightOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); rightOffsetAnimation.Duration = TimeSpan.FromMilliseconds(300); rightOffsetAnimation.InsertKeyFrame(0f, new Vector3(50f, 0f, 0f), new CubicEaseOut()); rightOffsetAnimation.InsertKeyFrame(1f, new Vector3(0f, 0f, 0f), new CubicEaseOut()); rightOffsetAnimation.Target = "Offset"; - + var rightOpacityAnimation = _compositor.CreateScalarKeyFrameAnimation(); rightOpacityAnimation.Duration = TimeSpan.FromMilliseconds(300); rightOpacityAnimation.InsertKeyFrame(0f, 0f, new CubicEaseOut()); rightOpacityAnimation.InsertKeyFrame(1f, 1f, new CubicEaseOut()); rightOpacityAnimation.Target = "Opacity"; - + // 应用动画 var leftAnimationGroup = _compositor.CreateAnimationGroup(); leftAnimationGroup.Add(leftOffsetAnimation); leftAnimationGroup.Add(leftOpacityAnimation); - + var rightAnimationGroup = _compositor.CreateAnimationGroup(); rightAnimationGroup.Add(rightOffsetAnimation); rightAnimationGroup.Add(rightOpacityAnimation); - + _leftNavigationControlVisual.StartAnimationGroup(leftAnimationGroup); _rightNavigationControlVisual.StartAnimationGroup(rightAnimationGroup); } - + private void PlayBackwardNavigationAnimation() { if (_compositor == null || _leftNavigationControlVisual == null || _rightNavigationControlVisual == null) return; - + // 左侧面板动画 - 从右滑入 var leftOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); leftOffsetAnimation.Duration = TimeSpan.FromMilliseconds(300); leftOffsetAnimation.InsertKeyFrame(0f, new Vector3(50f, 0f, 0f), new CubicEaseOut()); leftOffsetAnimation.InsertKeyFrame(1f, new Vector3(0f, 0f, 0f), new CubicEaseOut()); leftOffsetAnimation.Target = "Offset"; - + var leftOpacityAnimation = _compositor.CreateScalarKeyFrameAnimation(); leftOpacityAnimation.Duration = TimeSpan.FromMilliseconds(300); leftOpacityAnimation.InsertKeyFrame(0f, 0f, new CubicEaseOut()); leftOpacityAnimation.InsertKeyFrame(1f, 1f, new CubicEaseOut()); leftOpacityAnimation.Target = "Opacity"; - + // 右侧面板动画 - 从左滑入 var rightOffsetAnimation = _compositor.CreateVector3KeyFrameAnimation(); rightOffsetAnimation.Duration = TimeSpan.FromMilliseconds(300); rightOffsetAnimation.InsertKeyFrame(0f, new Vector3(-50f, 0f, 0f), new CubicEaseOut()); rightOffsetAnimation.InsertKeyFrame(1f, new Vector3(0f, 0f, 0f), new CubicEaseOut()); rightOffsetAnimation.Target = "Offset"; - + var rightOpacityAnimation = _compositor.CreateScalarKeyFrameAnimation(); rightOpacityAnimation.Duration = TimeSpan.FromMilliseconds(300); rightOpacityAnimation.InsertKeyFrame(0f, 0f, new CubicEaseOut()); rightOpacityAnimation.InsertKeyFrame(1f, 1f, new CubicEaseOut()); rightOpacityAnimation.Target = "Opacity"; - + // 应用动画 var leftAnimationGroup = _compositor.CreateAnimationGroup(); leftAnimationGroup.Add(leftOffsetAnimation); leftAnimationGroup.Add(leftOpacityAnimation); - + var rightAnimationGroup = _compositor.CreateAnimationGroup(); rightAnimationGroup.Add(rightOffsetAnimation); rightAnimationGroup.Add(rightOpacityAnimation); - + _leftNavigationControlVisual.StartAnimationGroup(leftAnimationGroup); _rightNavigationControlVisual.StartAnimationGroup(rightAnimationGroup); }