public void AddFrame(Func <Action> EnterAndGetExit, bool PreserveFuture)
            {
                if (!PreserveFuture)
                {
                    this.GoForward.Clear();
                }
                this.Owner.ButtonGoForward.Enabled = this.GoForward.Any();

                if (AddFrame_Current != null)
                {
                    AddFrame_Current.Exit();
                    var AddFrame_Back = AddFrame_Current;


                    this.Owner.ButtonGoBack.Enabled = true;
                    this.GoBack.Push(
                        delegate
                    {
                        if (AddFrame_Current != null)
                        {
                            AddFrame_Current.Exit();

                            var AddFrame_Forward = AddFrame_Current;

                            this.Owner.ButtonGoForward.Enabled = true;
                            this.GoForward.Push(
                                delegate
                            {
                                AddFrame(AddFrame_Forward.EnterAndGetExit, true);
                            }
                                );
                        }

                        AddFrame_Current      = AddFrame_Back;
                        AddFrame_Current.Exit = AddFrame_Current.EnterAndGetExit();

                        this.Owner.ButtonGoBack.Enabled = this.GoBack.Any();
                    }
                        );
                }

                AddFrame_Current = new FrameInfo
                {
                    EnterAndGetExit = EnterAndGetExit,
                    Exit            = EnterAndGetExit()
                };
            }
			public void AddFrame(Func<Action> EnterAndGetExit, bool PreserveFuture)
			{
				if (!PreserveFuture)
				{
					this.GoForward.Clear();
					
				}
				this.Owner.ButtonGoForward.Enabled = this.GoForward.Any();

				if (AddFrame_Current != null)
				{
					AddFrame_Current.Exit();
					var AddFrame_Back = AddFrame_Current;


					this.Owner.ButtonGoBack.Enabled = true;
					this.GoBack.Push(
						delegate
						{
							if (AddFrame_Current != null)
							{
								AddFrame_Current.Exit();
								
								var AddFrame_Forward = AddFrame_Current;

								this.Owner.ButtonGoForward.Enabled = true;
								this.GoForward.Push(
									delegate
									{
										AddFrame(AddFrame_Forward.EnterAndGetExit, true);
										

										
									}
								);
							}

							AddFrame_Current = AddFrame_Back;
							AddFrame_Current.Exit = AddFrame_Current.EnterAndGetExit();

							this.Owner.ButtonGoBack.Enabled = this.GoBack.Any();

							
							
						}
					);
				}

				AddFrame_Current = new FrameInfo
				{
					EnterAndGetExit = EnterAndGetExit,
					Exit = EnterAndGetExit()
				};
			}