protected override void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                _disposed = true;

                _page = null;

                if (!_fragmentManager.IsDestroyed)
                {
                    FragmentTransaction transaction = _fragmentManager.BeginTransactionEx();

                    foreach (Fragment fragment in _fragments)
                    {
                        transaction.RemoveEx(fragment);
                        transaction.SetTransitionEx((int)FragmentTransit.None);
                    }

                    transaction.CommitAllowingStateLossEx();

                    _fragmentManager.ExecutePendingTransactionsEx();

                    _fragments       = null;
                    _fragmentManager = null;
                }
            }

            base.Dispose(disposing);
        }
Exemple #2
0
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            _disposed = true;

            if (disposing)
            {
                if (_currentRenderer != null && _currentRenderer.Fragment.IsAlive())
                {
                    FragmentTransaction transaction = FragmentManager.BeginTransaction();
                    transaction.RemoveEx(_currentRenderer.Fragment);
                    transaction.CommitAllowingStateLossEx();
                    FragmentManager.ExecutePendingTransactionsEx();
                }

                Element.PropertyChanged -= OnElementPropertyChanged;
                Element.SizeChanged     -= OnElementSizeChanged;
                ((IShellController)Element).RemoveAppearanceObserver(this);

                // This cast is necessary because IShellFlyoutRenderer doesn't implement IDisposable
                (_flyoutRenderer as IDisposable)?.Dispose();

                _currentRenderer.Dispose();
                _currentRenderer = null;
            }

            Element = null;
            // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
            // TODO: set large fields to null.

            _disposed = true;
        }