diff --git a/src/Avalonia.Controls/Expander.cs b/src/Avalonia.Controls/Expander.cs
index e7f75336f5..5323939b50 100644
--- a/src/Avalonia.Controls/Expander.cs
+++ b/src/Avalonia.Controls/Expander.cs
@@ -66,9 +66,7 @@ namespace Avalonia.Controls
protected virtual void OnIsExpandedChanged(AvaloniaPropertyChangedEventArgs e)
{
- IVisual visualContent = Presenter;
-
- if (Content != null && ContentTransition != null && visualContent != null)
+ if (Content != null && ContentTransition != null && Presenter is Visual visualContent)
{
bool forward = ExpandDirection == ExpandDirection.Left ||
ExpandDirection == ExpandDirection.Up;
@@ -87,4 +85,4 @@ namespace Avalonia.Controls
private ExpandDirection _expandDirection;
private bool _isExpanded;
}
-}
\ No newline at end of file
+}
diff --git a/src/Avalonia.Visuals/Animation/CrossFade.cs b/src/Avalonia.Visuals/Animation/CrossFade.cs
index 307fb691ac..2230f8534b 100644
--- a/src/Avalonia.Visuals/Animation/CrossFade.cs
+++ b/src/Avalonia.Visuals/Animation/CrossFade.cs
@@ -58,17 +58,6 @@ namespace Avalonia.Animation
)
{
Cue = new Cue(0.0)
- },
- new KeyFrame
- (
- new Setter
- {
- Property = Visual.OpacityProperty,
- Value = 1.0
- }
- )
- {
- Cue = new Cue(1.0)
}
};
_fadeOutAnimation.Duration = _fadeInAnimation.Duration = duration;
@@ -101,7 +90,7 @@ namespace Avalonia.Animation
///
/// A that tracks the progress of the animation.
///
- public async Task Start(IVisual from, IVisual to)
+ public async Task Start(Visual from, Visual to)
{
var tasks = new List();
@@ -110,16 +99,15 @@ namespace Avalonia.Animation
to.Opacity = 0;
}
- if (from is Animatable fadeOut)
+ if (from != null)
{
- tasks.Add(_fadeOutAnimation.RunAsync(fadeOut));
+ tasks.Add(_fadeOutAnimation.RunAsync(from));
}
- if (to is Animatable fadeIn)
+ if (to != null)
{
- to.Opacity = 0;
to.IsVisible = true;
- tasks.Add(_fadeInAnimation.RunAsync(fadeIn));
+ tasks.Add(_fadeInAnimation.RunAsync(to));
}
@@ -128,7 +116,6 @@ namespace Avalonia.Animation
if (from != null)
{
from.IsVisible = false;
- from.Opacity = 1;
}
if (to != null)
@@ -152,7 +139,7 @@ namespace Avalonia.Animation
///
/// A that tracks the progress of the animation.
///
- Task IPageTransition.Start(IVisual from, IVisual to, bool forward)
+ Task IPageTransition.Start(Visual from, Visual to, bool forward)
{
return Start(from, to);
}
diff --git a/src/Avalonia.Visuals/Animation/IPageTransition.cs b/src/Avalonia.Visuals/Animation/IPageTransition.cs
index 6dc64de049..88912c1931 100644
--- a/src/Avalonia.Visuals/Animation/IPageTransition.cs
+++ b/src/Avalonia.Visuals/Animation/IPageTransition.cs
@@ -26,6 +26,6 @@ namespace Avalonia.Animation
///
/// A that tracks the progress of the animation.
///
- Task Start(IVisual from, IVisual to, bool forward);
+ Task Start(Visual from, Visual to, bool forward);
}
}
diff --git a/src/Avalonia.Visuals/Animation/PageSlide.cs b/src/Avalonia.Visuals/Animation/PageSlide.cs
index 13f9e67d29..5f03dc6b0c 100644
--- a/src/Avalonia.Visuals/Animation/PageSlide.cs
+++ b/src/Avalonia.Visuals/Animation/PageSlide.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Reactive.Threading.Tasks;
using System.Threading.Tasks;
using Avalonia.Media;
+using Avalonia.Styling;
using Avalonia.VisualTree;
namespace Avalonia.Animation
@@ -67,7 +68,7 @@ namespace Avalonia.Animation
///
/// A that tracks the progress of the animation.
///
- public async Task Start(IVisual from, IVisual to, bool forward)
+ public async Task Start(Visual from, Visual to, bool forward)
{
var tasks = new List();
var parent = GetVisualParent(from, to);
@@ -79,16 +80,69 @@ namespace Avalonia.Animation
// in favor of XAML based transition for pages
if (from != null)
{
-
+ var animation = new Animation
+ {
+ new KeyFrame
+ (
+ new Setter
+ {
+ Property = translateProperty,
+ Value = 0
+ }
+ )
+ {
+ Cue = new Cue(0.0)
+ },
+ new KeyFrame
+ (
+ new Setter
+ {
+ Property = translateProperty,
+ Value = forward ? -distance : distance
+ }
+ )
+ {
+ Cue = new Cue(1.0)
+ }
+ };
+ animation.Duration = Duration;
+ tasks.Add(animation.RunAsync(from));
}
if (to != null)
{
-
+ to.IsVisible = true;
+ var animation = new Animation
+ {
+
+ new KeyFrame
+ (
+ new Setter
+ {
+ Property = translateProperty,
+ Value = forward ? -distance : distance
+ }
+ )
+ {
+ Cue = new Cue(0.0)
+ },
+ new KeyFrame
+ (
+ new Setter
+ {
+ Property = translateProperty,
+ Value = 0
+ }
+ )
+ {
+ Cue = new Cue(1.0)
+ },
+ };
+ animation.Duration = Duration;
+ tasks.Add(animation.RunAsync(to));
}
- // FIXME: This is temporary until animations are fixed.
- await Task.Delay(1);
+ await Task.WhenAll(tasks);
if (from != null)
{