Browse Source

Fix for issue #13493 (#13518)

* Update OpenGlControlBase.cs

* Update TransitioningContentControl.cs

* bug fix and add test
release/11.0.6
laolarou 3 years ago
committed by Max Katz
parent
commit
a2e936fbc4
  1. 8
      src/Avalonia.Controls/TransitioningContentControl.cs
  2. 22
      tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs

8
src/Avalonia.Controls/TransitioningContentControl.cs

@ -15,6 +15,7 @@ namespace Avalonia.Controls;
public class TransitioningContentControl : ContentControl
{
private CancellationTokenSource? _currentTransition;
private ContentPresenter? _lastPresenter;
private ContentPresenter? _presenter2;
private bool _isFirstFull;
private bool _shouldAnimate;
@ -115,8 +116,15 @@ public class TransitioningContentControl : ContentControl
}
var currentPresenter = _isFirstFull ? _presenter2 : Presenter;
if (_lastPresenter != null &&
_lastPresenter != currentPresenter &&
_lastPresenter.Content == Content)
_lastPresenter.Content = null;
currentPresenter.Content = Content;
currentPresenter.IsVisible = true;
_lastPresenter = currentPresenter;
_isFirstFull = !_isFirstFull;

22
tests/Avalonia.Controls.UnitTests/TransitioningContentControlTests.cs

@ -211,6 +211,28 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(target.LogicalChildren[0], childControl);
}
[Fact]
public void Old_Content_Should_Be_Null_When_New_Content_Is_Old_one()
{
using var app = Start();
var (target, transition) = CreateTarget("");
var presenter2 = GetContentPresenters2(target);
target.PageTransition = null;
var childControl = new Control();
target.Presenter!.Content = childControl;
const string fakePage1 = "fakePage1";
const string fakePage2 = "fakePage2";
target.Presenter!.Content = fakePage1;
target.Presenter!.Content = fakePage2;
target.Presenter!.Content = fakePage1;
Assert.Equal(fakePage1, target.Presenter!.Content);
Assert.Equal(null, presenter2.Content);
}
private static IDisposable Start()
{
return UnitTestApplication.Start(

Loading…
Cancel
Save