protected override LazyScreen <TScreen, TMetadata> EnsureItem(LazyScreen <TScreen, TMetadata> newItem)
                {
                    var node = newItem as IChild;

                    if (node != null && node.Parent != this)
                    {
                        node.Parent = this;
                    }

                    return(newItem);
                }
                private void CloseItemCore(LazyScreen <TScreen, TMetadata> item)
                {
                    if (item.Equals(ActiveItem))
                    {
                        var next = DetermineNextItemToActivate(item);
                        ChangeActiveItem(next, true);
                    }
                    else
                    {
                        ScreenExtensions.TryDeactivate(item, true);
                    }

                    item.Reset();
                }
                public override void DeactivateItem(LazyScreen <TScreen, TMetadata> item, bool close)
                {
                    if (item == null)
                    {
                        return;
                    }

                    if (close)
                    {
                        CloseStrategy.Execute(new[] { item }, (canClose, closable) =>
                        {
                            if (canClose)
                            {
                                CloseItemCore(item);
                            }
                        });
                    }
                    else
                    {
                        ScreenExtensions.TryDeactivate(item, false);
                    }
                }
                protected LazyScreen <TScreen, TMetadata> DetermineNextItemToActivate(LazyScreen <TScreen, TMetadata> currentItem)
                {
                    var next = Items.FirstOrDefault(x => x != currentItem && x.IsScreenCreated);

                    return(next);
                }