committed by
GitHub
5 changed files with 40 additions and 88 deletions
@ -1,80 +0,0 @@ |
|||||
using System; |
|
||||
using System.Threading; |
|
||||
|
|
||||
using Avalonia.Animation; |
|
||||
using Avalonia.Controls; |
|
||||
using Avalonia.Styling; |
|
||||
|
|
||||
namespace Avalonia.ReactiveUI |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// A ContentControl that animates the transition when its content is changed.
|
|
||||
/// </summary>
|
|
||||
[Obsolete("Use TransitioningContentControl in Avalonia.Controls namespace")] |
|
||||
public class TransitioningContentControl : ContentControl, IStyleable |
|
||||
{ |
|
||||
/// <summary>
|
|
||||
/// <see cref="AvaloniaProperty"/> for the <see cref="PageTransition"/> property.
|
|
||||
/// </summary>
|
|
||||
public static readonly StyledProperty<IPageTransition?> PageTransitionProperty = |
|
||||
AvaloniaProperty.Register<TransitioningContentControl, IPageTransition?>(nameof(PageTransition), |
|
||||
new CrossFade(TimeSpan.FromSeconds(0.5))); |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// <see cref="AvaloniaProperty"/> for the <see cref="DefaultContent"/> property.
|
|
||||
/// </summary>
|
|
||||
public static readonly StyledProperty<object?> DefaultContentProperty = |
|
||||
AvaloniaProperty.Register<TransitioningContentControl, object?>(nameof(DefaultContent)); |
|
||||
|
|
||||
private CancellationTokenSource? _lastTransitionCts; |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// Gets or sets the animation played when content appears and disappears.
|
|
||||
/// </summary>
|
|
||||
public IPageTransition? PageTransition |
|
||||
{ |
|
||||
get => GetValue(PageTransitionProperty); |
|
||||
set => SetValue(PageTransitionProperty, value); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// Gets or sets the content displayed whenever there is no page currently routed.
|
|
||||
/// </summary>
|
|
||||
public object? DefaultContent |
|
||||
{ |
|
||||
get => GetValue(DefaultContentProperty); |
|
||||
set => SetValue(DefaultContentProperty, value); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// Gets or sets the content with animation.
|
|
||||
/// </summary>
|
|
||||
public new object? Content |
|
||||
{ |
|
||||
get => base.Content; |
|
||||
set => UpdateContentWithTransition(value); |
|
||||
} |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// TransitioningContentControl uses the default ContentControl
|
|
||||
/// template from Avalonia default theme.
|
|
||||
/// </summary>
|
|
||||
Type IStyleable.StyleKey => typeof(ContentControl); |
|
||||
|
|
||||
/// <summary>
|
|
||||
/// Updates the content with transitions.
|
|
||||
/// </summary>
|
|
||||
/// <param name="content">New content to set.</param>
|
|
||||
private async void UpdateContentWithTransition(object? content) |
|
||||
{ |
|
||||
_lastTransitionCts?.Cancel(); |
|
||||
_lastTransitionCts = new CancellationTokenSource(); |
|
||||
|
|
||||
if (PageTransition != null) |
|
||||
await PageTransition.Start(this, null, true, _lastTransitionCts.Token); |
|
||||
base.Content = content; |
|
||||
if (PageTransition != null) |
|
||||
await PageTransition.Start(null, this, true, _lastTransitionCts.Token); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue