summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs4
-rw-r--r--Xamarin.Forms.Core/INavigationPageController.cs26
-rw-r--r--Xamarin.Forms.Core/Internals/NavigationRequestedEventArgs.cs (renamed from Xamarin.Forms.Core/NavigationRequestedEventArgs.cs)4
-rw-r--r--Xamarin.Forms.Core/NavigationPage.cs71
-rw-r--r--Xamarin.Forms.Core/Xamarin.Forms.Core.csproj3
-rw-r--r--Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs48
-rw-r--r--Xamarin.Forms.Platform.Android/Platform.cs6
-rw-r--r--Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs43
-rw-r--r--Xamarin.Forms.Platform.WP8/NavigationPageRenderer.cs15
-rw-r--r--Xamarin.Forms.Platform.WinRT/NavigationPageRenderer.cs13
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs31
-rw-r--r--docs/Xamarin.Forms.Core/Xamarin.Forms.Internals/NavigationRequestedEventArgs.xml122
-rw-r--r--docs/Xamarin.Forms.Core/Xamarin.Forms/INavigationPageController.xml144
-rw-r--r--docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationPage.xml75
-rw-r--r--docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationRequestedEventArgs.xml122
15 files changed, 630 insertions, 97 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs b/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs
index 1d3d4bd2..a6abee55 100644
--- a/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs
+++ b/Xamarin.Forms.Core.UnitTests/NavigationUnitTest.cs
@@ -203,7 +203,7 @@ namespace Xamarin.Forms.Core.UnitTests
await nav.PushAsync (child1);
await nav.PushAsync (child2);
- var copy = nav.StackCopy;
+ var copy = ((INavigationPageController)nav).StackCopy;
Assert.AreEqual (child2, copy.Pop ());
Assert.AreEqual (child1, copy.Pop ());
@@ -217,7 +217,7 @@ namespace Xamarin.Forms.Core.UnitTests
var nav = new NavigationPage (root);
Assert.AreEqual (root, nav.LogicalChildren[0]);
- Assert.AreEqual (1, nav.StackDepth);
+ Assert.AreEqual (1, ((INavigationPageController)nav).StackDepth);
}
[Test]
diff --git a/Xamarin.Forms.Core/INavigationPageController.cs b/Xamarin.Forms.Core/INavigationPageController.cs
new file mode 100644
index 00000000..eddbe750
--- /dev/null
+++ b/Xamarin.Forms.Core/INavigationPageController.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Xamarin.Forms.Internals;
+
+namespace Xamarin.Forms
+{
+ public interface INavigationPageController
+ {
+ Stack<Page> StackCopy { get; }
+
+ int StackDepth { get; }
+
+ Task<Page> PopAsyncInner(bool animated, bool fast = false);
+
+ event EventHandler<NavigationRequestedEventArgs> InsertPageBeforeRequested;
+
+ event EventHandler<NavigationRequestedEventArgs> PopRequested;
+
+ event EventHandler<NavigationRequestedEventArgs> PopToRootRequested;
+
+ event EventHandler<NavigationRequestedEventArgs> PushRequested;
+
+ event EventHandler<NavigationRequestedEventArgs> RemovePageRequested;
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Core/NavigationRequestedEventArgs.cs b/Xamarin.Forms.Core/Internals/NavigationRequestedEventArgs.cs
index b21cffce..32022f14 100644
--- a/Xamarin.Forms.Core/NavigationRequestedEventArgs.cs
+++ b/Xamarin.Forms.Core/Internals/NavigationRequestedEventArgs.cs
@@ -1,8 +1,8 @@
using System.Threading.Tasks;
-namespace Xamarin.Forms
+namespace Xamarin.Forms.Internals
{
- internal class NavigationRequestedEventArgs : NavigationEventArgs
+ public class NavigationRequestedEventArgs : NavigationEventArgs
{
public NavigationRequestedEventArgs(Page page, bool animated, bool realize = true) : base(page)
{
diff --git a/Xamarin.Forms.Core/NavigationPage.cs b/Xamarin.Forms.Core/NavigationPage.cs
index 61545b11..b13fc6c4 100644
--- a/Xamarin.Forms.Core/NavigationPage.cs
+++ b/Xamarin.Forms.Core/NavigationPage.cs
@@ -2,12 +2,13 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using Xamarin.Forms.Internals;
using Xamarin.Forms.Platform;
namespace Xamarin.Forms
{
[RenderWith(typeof(_NavigationPageRenderer))]
- public class NavigationPage : Page, IPageContainer<Page>
+ public class NavigationPage : Page, IPageContainer<Page>, INavigationPageController
{
public static readonly BindableProperty BackButtonTitleProperty = BindableProperty.CreateAttached("BackButtonTitle", typeof(string), typeof(Page), null);
@@ -58,7 +59,7 @@ namespace Xamarin.Forms
internal Task CurrentNavigationTask { get; set; }
- internal Stack<Page> StackCopy
+ Stack<Page> INavigationPageController.StackCopy
{
get
{
@@ -69,7 +70,7 @@ namespace Xamarin.Forms
}
}
- internal int StackDepth
+ int INavigationPageController.StackDepth
{
get { return InternalChildren.Count; }
}
@@ -116,12 +117,12 @@ namespace Xamarin.Forms
CurrentNavigationTask = tcs.Task;
await oldTask;
- Page page = await PopAsyncInner(animated);
+ Page page = await ((INavigationPageController)this).PopAsyncInner(animated);
tcs.SetResult(true);
return page;
}
- Task<Page> result = PopAsyncInner(animated);
+ Task<Page> result = ((INavigationPageController)this).PopAsyncInner(animated);
CurrentNavigationTask = result;
return await result;
}
@@ -206,7 +207,7 @@ namespace Xamarin.Forms
if (CurrentPage.SendBackButtonPressed())
return true;
- if (StackDepth > 1)
+ if (((INavigationPageController)this).StackDepth > 1)
{
SafePop();
return true;
@@ -215,11 +216,17 @@ namespace Xamarin.Forms
return base.OnBackButtonPressed();
}
- internal event EventHandler<NavigationRequestedEventArgs> InsertPageBeforeRequested;
+ event EventHandler<NavigationRequestedEventArgs> InsertPageBeforeRequestedInternal;
- internal async Task<Page> PopAsyncInner(bool animated, bool fast = false)
+ event EventHandler<NavigationRequestedEventArgs> INavigationPageController.InsertPageBeforeRequested
{
- if (StackDepth == 1)
+ add { InsertPageBeforeRequestedInternal += value; }
+ remove { InsertPageBeforeRequestedInternal -= value; }
+ }
+
+ async Task<Page> INavigationPageController.PopAsyncInner(bool animated, bool fast)
+ {
+ if (((INavigationPageController)this).StackDepth == 1)
{
return null;
}
@@ -230,7 +237,7 @@ namespace Xamarin.Forms
var removed = true;
- EventHandler<NavigationRequestedEventArgs> requestPop = PopRequested;
+ EventHandler<NavigationRequestedEventArgs> requestPop = PopRequestedInternal;
if (requestPop != null)
{
requestPop(this, args);
@@ -252,13 +259,37 @@ namespace Xamarin.Forms
return page;
}
- internal event EventHandler<NavigationRequestedEventArgs> PopRequested;
+ event EventHandler<NavigationRequestedEventArgs> PopRequestedInternal;
+
+ event EventHandler<NavigationRequestedEventArgs> INavigationPageController.PopRequested
+ {
+ add { PopRequestedInternal += value; }
+ remove { PopRequestedInternal -= value; }
+ }
- internal event EventHandler<NavigationRequestedEventArgs> PopToRootRequested;
+ event EventHandler<NavigationRequestedEventArgs> PopToRootRequestedInternal;
- internal event EventHandler<NavigationRequestedEventArgs> PushRequested;
+ event EventHandler<NavigationRequestedEventArgs> INavigationPageController.PopToRootRequested
+ {
+ add { PopToRootRequestedInternal += value; }
+ remove { PopToRootRequestedInternal -= value; }
+ }
- internal event EventHandler<NavigationRequestedEventArgs> RemovePageRequested;
+ event EventHandler<NavigationRequestedEventArgs> PushRequestedInternal;
+
+ event EventHandler<NavigationRequestedEventArgs> INavigationPageController.PushRequested
+ {
+ add { PushRequestedInternal += value; }
+ remove { PushRequestedInternal -= value; }
+ }
+
+ event EventHandler<NavigationRequestedEventArgs> RemovePageRequestedInternal;
+
+ event EventHandler<NavigationRequestedEventArgs> INavigationPageController.RemovePageRequested
+ {
+ add { RemovePageRequestedInternal += value; }
+ remove { RemovePageRequestedInternal -= value; }
+ }
void InsertPageBefore(Page page, Page before)
{
@@ -268,7 +299,7 @@ namespace Xamarin.Forms
if (InternalChildren.Contains(page))
throw new ArgumentException("Cannot insert page which is already in the navigation stack");
- EventHandler<NavigationRequestedEventArgs> handler = InsertPageBeforeRequested;
+ EventHandler<NavigationRequestedEventArgs> handler = InsertPageBeforeRequestedInternal;
if (handler != null)
handler(this, new NavigationRequestedEventArgs(page, before, false));
@@ -282,7 +313,7 @@ namespace Xamarin.Forms
async Task PopToRootAsyncInner(bool animated)
{
- if (StackDepth == 1)
+ if (((INavigationPageController)this).StackDepth == 1)
return;
var root = (Page)InternalChildren.First();
@@ -293,7 +324,7 @@ namespace Xamarin.Forms
var args = new NavigationRequestedEventArgs(root, animated);
- EventHandler<NavigationRequestedEventArgs> requestPopToRoot = PopToRootRequested;
+ EventHandler<NavigationRequestedEventArgs> requestPopToRoot = PopToRootRequestedInternal;
if (requestPopToRoot != null)
{
requestPopToRoot(this, args);
@@ -315,7 +346,7 @@ namespace Xamarin.Forms
var args = new NavigationRequestedEventArgs(page, animated);
- EventHandler<NavigationRequestedEventArgs> requestPush = PushRequested;
+ EventHandler<NavigationRequestedEventArgs> requestPush = PushRequestedInternal;
if (requestPush != null)
{
requestPush(this, args);
@@ -337,7 +368,7 @@ namespace Xamarin.Forms
void RemovePage(Page page)
{
- if (page == CurrentPage && StackDepth <= 1)
+ if (page == CurrentPage && ((INavigationPageController)this).StackDepth <= 1)
throw new InvalidOperationException("Cannot remove root page when it is also the currently displayed page.");
if (page == CurrentPage)
{
@@ -349,7 +380,7 @@ namespace Xamarin.Forms
if (!InternalChildren.Contains(page))
throw new ArgumentException("Page to remove must be contained on this Navigation Page");
- EventHandler<NavigationRequestedEventArgs> handler = RemovePageRequested;
+ EventHandler<NavigationRequestedEventArgs> handler = RemovePageRequestedInternal;
if (handler != null)
handler(this, new NavigationRequestedEventArgs(page, true));
diff --git a/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj b/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
index 24160a53..e5a1b640 100644
--- a/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
+++ b/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
@@ -94,6 +94,7 @@
<Compile Include="EmailKeyboard.cs" />
<Compile Include="IEntryController.cs" />
<Compile Include="IImageController.cs" />
+ <Compile Include="INavigationPageController.cs" />
<Compile Include="Internals\EvalRequested.cs" />
<Compile Include="ExportEffectAttribute.cs" />
<Compile Include="ExpressionSearch.cs" />
@@ -169,7 +170,7 @@
<Compile Include="ModalPushingEventArgs.cs" />
<Compile Include="NavigationEventArgs.cs" />
<Compile Include="NavigationModel.cs" />
- <Compile Include="NavigationRequestedEventArgs.cs" />
+ <Compile Include="Internals\NavigationRequestedEventArgs.cs" />
<Compile Include="NotifyCollectionChangedEventArgsEx.cs" />
<Compile Include="NotifyCollectionChangedEventArgsExtensions.cs" />
<Compile Include="NullEffect.cs" />
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs
index 30733c64..7196cf8c 100644
--- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs
@@ -15,6 +15,7 @@ using Android.Support.V4.Widget;
using Android.Support.V7.Graphics.Drawable;
using Android.Util;
using Android.Views;
+using Xamarin.Forms.Internals;
using ActionBarDrawerToggle = Android.Support.V7.App.ActionBarDrawerToggle;
using AView = Android.Views.View;
using AToolbar = Android.Support.V7.Widget.Toolbar;
@@ -137,11 +138,14 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
IVisualElementRenderer renderer = Android.Platform.GetRenderer(child);
renderer?.Dispose();
}
- Element.PushRequested -= OnPushed;
- Element.PopRequested -= OnPopped;
- Element.PopToRootRequested -= OnPoppedToRoot;
- Element.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
- Element.RemovePageRequested -= OnRemovePageRequested;
+
+ var navController = (INavigationPageController)Element;
+
+ navController.PushRequested -= OnPushed;
+ navController.PopRequested -= OnPopped;
+ navController.PopToRootRequested -= OnPoppedToRoot;
+ navController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
+ navController.RemovePageRequested -= OnRemovePageRequested;
Element.SendDisappearing();
}
@@ -188,11 +192,13 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
if (e.OldElement != null)
{
- e.OldElement.PushRequested -= OnPushed;
- e.OldElement.PopRequested -= OnPopped;
- e.OldElement.PopToRootRequested -= OnPoppedToRoot;
- e.OldElement.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
- e.OldElement.RemovePageRequested -= OnRemovePageRequested;
+ var oldNavController = (INavigationPageController)e.OldElement;
+
+ oldNavController.PushRequested -= OnPushed;
+ oldNavController.PopRequested -= OnPopped;
+ oldNavController.PopToRootRequested -= OnPoppedToRoot;
+ oldNavController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
+ oldNavController.RemovePageRequested -= OnRemovePageRequested;
RemoveAllViews();
if (_toolbar != null)
@@ -220,14 +226,16 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
_toolbarTracker.AdditionalTargets = parents;
UpdateMenu();
- e.NewElement.PushRequested += OnPushed;
- e.NewElement.PopRequested += OnPopped;
- e.NewElement.PopToRootRequested += OnPoppedToRoot;
- e.NewElement.InsertPageBeforeRequested += OnInsertPageBeforeRequested;
- e.NewElement.RemovePageRequested += OnRemovePageRequested;
+ var navController = (INavigationPageController)e.NewElement;
+
+ navController.PushRequested += OnPushed;
+ navController.PopRequested += OnPopped;
+ navController.PopToRootRequested += OnPoppedToRoot;
+ navController.InsertPageBeforeRequested += OnInsertPageBeforeRequested;
+ navController.RemovePageRequested += OnRemovePageRequested;
// If there is already stuff on the stack we need to push it
- e.NewElement.StackCopy.Reverse().ForEach(p => PushViewAsync(p, false));
+ ((INavigationPageController)e.NewElement).StackCopy.Reverse().ForEach(p => PushViewAsync(p, false));
}
}
@@ -415,7 +423,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
Task<bool> OnPopViewAsync(Page page, bool animated)
{
- Page pageToShow = Element.StackCopy.Skip(1).FirstOrDefault();
+ Page pageToShow = ((INavigationPageController)Element).StackCopy.Skip(1).FirstOrDefault();
if (pageToShow == null)
return Task.FromResult(false);
@@ -593,10 +601,10 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
if (!removed)
{
UpdateToolbar();
- if (_drawerToggle != null && Element.StackDepth == 2)
+ if (_drawerToggle != null && ((INavigationPageController)Element).StackDepth == 2)
AnimateArrowIn();
}
- else if (_drawerToggle != null && Element.StackDepth == 2)
+ else if (_drawerToggle != null && ((INavigationPageController)Element).StackDepth == 2)
AnimateArrowOut();
Device.StartTimer(TimeSpan.FromMilliseconds(200), () =>
@@ -680,7 +688,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat
if (bar == null)
return;
- bool isNavigated = Element.StackDepth > 1;
+ bool isNavigated = ((INavigationPageController)Element).StackDepth > 1;
bar.NavigationIcon = null;
if (isNavigated)
diff --git a/Xamarin.Forms.Platform.Android/Platform.cs b/Xamarin.Forms.Platform.Android/Platform.cs
index 8c289ef4..c00b9544 100644
--- a/Xamarin.Forms.Platform.Android/Platform.cs
+++ b/Xamarin.Forms.Platform.Android/Platform.cs
@@ -872,7 +872,7 @@ namespace Xamarin.Forms.Platform.Android
return false;
bool hasMasterDetailPage = CurrentMasterDetailPage != null;
- bool navigated = CurrentNavigationPage != null && CurrentNavigationPage.StackDepth > 1;
+ bool navigated = CurrentNavigationPage != null && ((INavigationPageController)CurrentNavigationPage).StackDepth > 1;
bool navigationPageHasNavigationBar = CurrentNavigationPage != null && NavigationPage.GetHasNavigationBar(CurrentNavigationPage.CurrentPage);
return navigationPageHasNavigationBar || (hasMasterDetailPage && !navigated);
}
@@ -880,7 +880,7 @@ namespace Xamarin.Forms.Platform.Android
bool ShouldUpdateActionBarUpColor()
{
bool hasMasterDetailPage = CurrentMasterDetailPage != null;
- bool navigated = CurrentNavigationPage != null && CurrentNavigationPage.StackDepth > 1;
+ bool navigated = CurrentNavigationPage != null && ((INavigationPageController)CurrentNavigationPage).StackDepth > 1;
return (hasMasterDetailPage && navigated) || !hasMasterDetailPage;
}
@@ -903,7 +903,7 @@ namespace Xamarin.Forms.Platform.Android
if (CurrentNavigationPage == null)
return false;
- bool pagePushed = CurrentNavigationPage.StackDepth > 1;
+ bool pagePushed = ((INavigationPageController)CurrentNavigationPage).StackDepth > 1;
bool pushedPageHasBackButton = NavigationPage.GetHasBackButton(CurrentNavigationPage.CurrentPage);
return pagePushed && pushedPageHasBackButton;
diff --git a/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs
index 91e052ca..395a0f82 100644
--- a/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/Renderers/NavigationRenderer.cs
@@ -2,6 +2,7 @@ using System;
using System.Linq;
using System.Threading.Tasks;
using Android.Views;
+using Xamarin.Forms.Internals;
using AButton = Android.Widget.Button;
using AView = Android.Views.View;
using AndroidAnimation = Android.Animation;
@@ -47,11 +48,13 @@ namespace Xamarin.Forms.Platform.Android
if (Element != null)
{
- Element.PushRequested -= OnPushed;
- Element.PopRequested -= OnPopped;
- Element.PopToRootRequested -= OnPoppedToRoot;
- Element.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
- Element.RemovePageRequested -= OnRemovePageRequested;
+ var navController = (INavigationPageController)Element;
+
+ navController.PushRequested -= OnPushed;
+ navController.PopRequested -= OnPopped;
+ navController.PopToRootRequested -= OnPoppedToRoot;
+ navController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
+ navController.RemovePageRequested -= OnRemovePageRequested;
}
}
@@ -76,25 +79,27 @@ namespace Xamarin.Forms.Platform.Android
if (e.OldElement != null)
{
- NavigationPage oldNav = e.OldElement;
- oldNav.PushRequested -= OnPushed;
- oldNav.PopRequested -= OnPopped;
- oldNav.PopToRootRequested -= OnPoppedToRoot;
- oldNav.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
- oldNav.RemovePageRequested -= OnRemovePageRequested;
+ var oldNavController = (INavigationPageController)e.OldElement;
+
+ oldNavController.PushRequested -= OnPushed;
+ oldNavController.PopRequested -= OnPopped;
+ oldNavController.PopToRootRequested -= OnPoppedToRoot;
+ oldNavController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
+ oldNavController.RemovePageRequested -= OnRemovePageRequested;
RemoveAllViews();
}
- NavigationPage nav = e.NewElement;
- nav.PushRequested += OnPushed;
- nav.PopRequested += OnPopped;
- nav.PopToRootRequested += OnPoppedToRoot;
- nav.InsertPageBeforeRequested += OnInsertPageBeforeRequested;
- nav.RemovePageRequested += OnRemovePageRequested;
+ var newNavController = (INavigationPageController)e.NewElement;
+
+ newNavController.PushRequested += OnPushed;
+ newNavController.PopRequested += OnPopped;
+ newNavController.PopToRootRequested += OnPoppedToRoot;
+ newNavController.InsertPageBeforeRequested += OnInsertPageBeforeRequested;
+ newNavController.RemovePageRequested += OnRemovePageRequested;
// If there is already stuff on the stack we need to push it
- nav.StackCopy.Reverse().ForEach(p => PushViewAsync(p, false));
+ newNavController.StackCopy.Reverse().ForEach(p => PushViewAsync(p, false));
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
@@ -112,7 +117,7 @@ namespace Xamarin.Forms.Platform.Android
protected virtual Task<bool> OnPopViewAsync(Page page, bool animated)
{
- Page pageToShow = Element.StackCopy.Skip(1).FirstOrDefault();
+ Page pageToShow = ((INavigationPageController)Element).StackCopy.Skip(1).FirstOrDefault();
if (pageToShow == null)
return Task.FromResult(false);
diff --git a/Xamarin.Forms.Platform.WP8/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.WP8/NavigationPageRenderer.cs
index 35a77f21..2bd5b7b3 100644
--- a/Xamarin.Forms.Platform.WP8/NavigationPageRenderer.cs
+++ b/Xamarin.Forms.Platform.WP8/NavigationPageRenderer.cs
@@ -5,6 +5,7 @@ using System.Diagnostics;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
+using Xamarin.Forms.Internals;
namespace Xamarin.Forms.Platform.WinPhone
{
@@ -26,11 +27,13 @@ namespace Xamarin.Forms.Platform.WinPhone
Action init = () =>
{
- Element.PushRequested += PageOnPushed;
- Element.PopRequested += PageOnPopped;
- Element.PopToRootRequested += PageOnPoppedToRoot;
- Element.RemovePageRequested += RemovePageRequested;
- Element.InsertPageBeforeRequested += ElementOnInsertPageBeforeRequested;
+ var navController = (INavigationPageController)Element;
+
+ navController.PushRequested += PageOnPushed;
+ navController.PopRequested += PageOnPopped;
+ navController.PopToRootRequested += PageOnPoppedToRoot;
+ navController.RemovePageRequested += RemovePageRequested;
+ navController.InsertPageBeforeRequested += ElementOnInsertPageBeforeRequested;
Element.PropertyChanged += OnElementPropertyChanged;
var platform = (Platform)Element.Platform;
@@ -132,7 +135,7 @@ namespace Xamarin.Forms.Platform.WinPhone
var platform = Element.Platform as Platform;
if (platform != null)
{
- if (e.Page == Element.StackCopy.LastOrDefault())
+ if (e.Page == ((INavigationPageController)Element).StackCopy.LastOrDefault())
e.Page.IgnoresContainerArea = true;
e.Task = platform.PushCore(e.Page, Element, e.Animated, e.Realize).ContinueWith((t, o) => true, null);
}
diff --git a/Xamarin.Forms.Platform.WinRT/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.WinRT/NavigationPageRenderer.cs
index 8bcf207f..9fe59bad 100644
--- a/Xamarin.Forms.Platform.WinRT/NavigationPageRenderer.cs
+++ b/Xamarin.Forms.Platform.WinRT/NavigationPageRenderer.cs
@@ -12,6 +12,7 @@ using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Media.Animation;
+using Xamarin.Forms.Internals;
#if WINDOWS_UWP
using Windows.UI.Xaml.Data;
using Windows.UI.Core;
@@ -154,8 +155,8 @@ namespace Xamarin.Forms.Platform.WinRT
if (oldElement != null)
{
- oldElement.PushRequested -= OnPushRequested;
- oldElement.PopRequested -= OnPopRequested;
+ ((INavigationPageController)oldElement).PushRequested -= OnPushRequested;
+ ((INavigationPageController)oldElement).PopRequested -= OnPopRequested;
oldElement.InternalChildren.CollectionChanged -= OnChildrenChanged;
oldElement.PropertyChanged -= OnElementPropertyChanged;
}
@@ -184,8 +185,8 @@ namespace Xamarin.Forms.Platform.WinRT
UpdateTitleColor();
UpdateNavigationBarBackground();
Element.PropertyChanged += OnElementPropertyChanged;
- Element.PushRequested += OnPushRequested;
- Element.PopRequested += OnPopRequested;
+ ((INavigationPageController)Element).PushRequested += OnPushRequested;
+ ((INavigationPageController)Element).PopRequested += OnPopRequested;
Element.InternalChildren.CollectionChanged += OnChildrenChanged;
if (!string.IsNullOrEmpty(Element.AutomationId))
@@ -391,8 +392,8 @@ namespace Xamarin.Forms.Platform.WinRT
void PushExistingNavigationStack()
{
- for (int i = Element.StackCopy.Count - 1; i >= 0; i--)
- SetPage(Element.StackCopy.ElementAt(i), false, false);
+ for (int i = ((INavigationPageController)Element).StackCopy.Count - 1; i >= 0; i--)
+ SetPage(((INavigationPageController)Element).StackCopy.ElementAt(i), false, false);
}
void SetPage(Page page, bool isAnimated, bool isPopping)
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
index da3a0aa2..5fb69c0d 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
@@ -6,6 +6,7 @@ using System.Drawing;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using Xamarin.Forms.Internals;
#if __UNIFIED__
using UIKit;
using CoreGraphics;
@@ -217,18 +218,20 @@ namespace Xamarin.Forms.Platform.iOS
"NavigationPage must have a root Page before being used. Either call PushAsync with a valid Page, or pass a Page to the constructor before usage.");
}
- navPage.PushRequested += OnPushRequested;
- navPage.PopRequested += OnPopRequested;
- navPage.PopToRootRequested += OnPopToRootRequested;
- navPage.RemovePageRequested += OnRemovedPageRequested;
- navPage.InsertPageBeforeRequested += OnInsertPageBeforeRequested;
+ var navController = ((INavigationPageController)navPage);
+
+ navController.PushRequested += OnPushRequested;
+ navController.PopRequested += OnPopRequested;
+ navController.PopToRootRequested += OnPopToRootRequested;
+ navController.RemovePageRequested += OnRemovedPageRequested;
+ navController.InsertPageBeforeRequested += OnInsertPageBeforeRequested;
UpdateTint();
UpdateBarBackgroundColor();
UpdateBarTextColor();
// If there is already stuff on the stack we need to push it
- navPage.StackCopy.Reverse().ForEach(async p => await PushPageAsync(p, false));
+ ((INavigationPageController)navPage).StackCopy.Reverse().ForEach(async p => await PushPageAsync(p, false));
_tracker = new VisualElementTracker(this);
@@ -260,11 +263,13 @@ namespace Xamarin.Forms.Platform.iOS
var navPage = (NavigationPage)Element;
navPage.PropertyChanged -= HandlePropertyChanged;
- navPage.PushRequested -= OnPushRequested;
- navPage.PopRequested -= OnPopRequested;
- navPage.PopToRootRequested -= OnPopToRootRequested;
- navPage.RemovePageRequested -= OnRemovedPageRequested;
- navPage.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
+
+ var navController = ((INavigationPageController)navPage);
+ navController.PushRequested -= OnPushRequested;
+ navController.PopRequested -= OnPopRequested;
+ navController.PopToRootRequested -= OnPopToRootRequested;
+ navController.RemovePageRequested -= OnRemovedPageRequested;
+ navController.InsertPageBeforeRequested -= OnInsertPageBeforeRequested;
}
base.Dispose(disposing);
@@ -542,7 +547,7 @@ namespace Xamarin.Forms.Platform.iOS
for (var i = 0; i < removed; i++)
{
// lets just pop these suckers off, do not await, the true is there to make this fast
- await ((NavigationPage)Element).PopAsyncInner(animated, true);
+ await ((INavigationPageController)Element).PopAsyncInner(animated, true);
}
// because we skip the normal pop process we need to dispose ourselves
controller.Dispose();
@@ -625,7 +630,7 @@ namespace Xamarin.Forms.Platform.iOS
void UpdateLeftBarButtonItem(ParentingViewController containerController)
{
var currentChild = containerController.Child;
- var firstPage = ((NavigationPage)Element).StackCopy.LastOrDefault();
+ var firstPage = ((INavigationPageController)Element).StackCopy.LastOrDefault();
if ((currentChild != firstPage && NavigationPage.GetHasBackButton(currentChild)) || _parentMasterDetailPage == null)
return;
diff --git a/docs/Xamarin.Forms.Core/Xamarin.Forms.Internals/NavigationRequestedEventArgs.xml b/docs/Xamarin.Forms.Core/Xamarin.Forms.Internals/NavigationRequestedEventArgs.xml
new file mode 100644
index 00000000..72f27d4b
--- /dev/null
+++ b/docs/Xamarin.Forms.Core/Xamarin.Forms.Internals/NavigationRequestedEventArgs.xml
@@ -0,0 +1,122 @@
+<Type Name="NavigationRequestedEventArgs" FullName="Xamarin.Forms.Internals.NavigationRequestedEventArgs">
+ <TypeSignature Language="C#" Value="public class NavigationRequestedEventArgs : Xamarin.Forms.NavigationEventArgs" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit NavigationRequestedEventArgs extends Xamarin.Forms.NavigationEventArgs" />
+ <AssemblyInfo>
+ <AssemblyName>Xamarin.Forms.Core</AssemblyName>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>Xamarin.Forms.NavigationEventArgs</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NavigationRequestedEventArgs (Xamarin.Forms.Page page, bool animated, bool realize = true);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class Xamarin.Forms.Page page, bool animated, bool realize) cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="page" Type="Xamarin.Forms.Page" />
+ <Parameter Name="animated" Type="System.Boolean" />
+ <Parameter Name="realize" Type="System.Boolean" />
+ </Parameters>
+ <Docs>
+ <param name="page">To be added.</param>
+ <param name="animated">To be added.</param>
+ <param name="realize">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NavigationRequestedEventArgs (Xamarin.Forms.Page page, Xamarin.Forms.Page before, bool animated);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class Xamarin.Forms.Page page, class Xamarin.Forms.Page before, bool animated) cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="page" Type="Xamarin.Forms.Page" />
+ <Parameter Name="before" Type="Xamarin.Forms.Page" />
+ <Parameter Name="animated" Type="System.Boolean" />
+ </Parameters>
+ <Docs>
+ <param name="page">To be added.</param>
+ <param name="before">To be added.</param>
+ <param name="animated">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Animated">
+ <MemberSignature Language="C#" Value="public bool Animated { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance bool Animated" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="BeforePage">
+ <MemberSignature Language="C#" Value="public Xamarin.Forms.Page BeforePage { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class Xamarin.Forms.Page BeforePage" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Xamarin.Forms.Page</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Realize">
+ <MemberSignature Language="C#" Value="public bool Realize { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance bool Realize" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Task">
+ <MemberSignature Language="C#" Value="public System.Threading.Tasks.Task&lt;bool&gt; Task { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Threading.Tasks.Task`1&lt;bool&gt; Task" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Threading.Tasks.Task&lt;System.Boolean&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/docs/Xamarin.Forms.Core/Xamarin.Forms/INavigationPageController.xml b/docs/Xamarin.Forms.Core/Xamarin.Forms/INavigationPageController.xml
new file mode 100644
index 00000000..f776f98c
--- /dev/null
+++ b/docs/Xamarin.Forms.Core/Xamarin.Forms/INavigationPageController.xml
@@ -0,0 +1,144 @@
+<Type Name="INavigationPageController" FullName="Xamarin.Forms.INavigationPageController">
+ <TypeSignature Language="C#" Value="public interface INavigationPageController" />
+ <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract INavigationPageController" />
+ <AssemblyInfo>
+ <AssemblyName>Xamarin.Forms.Core</AssemblyName>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="InsertPageBeforeRequested">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt; InsertPageBeforeRequested;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Xamarin.Forms.NavigationRequestedEventArgs&gt; InsertPageBeforeRequested" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopAsyncInner">
+ <MemberSignature Language="C#" Value="public System.Threading.Tasks.Task&lt;Xamarin.Forms.Page&gt; PopAsyncInner (bool animated, bool fast = false);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Threading.Tasks.Task`1&lt;class Xamarin.Forms.Page&gt; PopAsyncInner(bool animated, bool fast) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Threading.Tasks.Task&lt;Xamarin.Forms.Page&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="animated" Type="System.Boolean" />
+ <Parameter Name="fast" Type="System.Boolean" />
+ </Parameters>
+ <Docs>
+ <param name="animated">To be added.</param>
+ <param name="fast">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopRequested">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt; PopRequested;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Xamarin.Forms.NavigationRequestedEventArgs&gt; PopRequested" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PopToRootRequested">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt; PopToRootRequested;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Xamarin.Forms.NavigationRequestedEventArgs&gt; PopToRootRequested" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PushRequested">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt; PushRequested;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Xamarin.Forms.NavigationRequestedEventArgs&gt; PushRequested" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="RemovePageRequested">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt; RemovePageRequested;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Xamarin.Forms.NavigationRequestedEventArgs&gt; RemovePageRequested" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Xamarin.Forms.NavigationRequestedEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="StackCopy">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.Stack&lt;Xamarin.Forms.Page&gt; StackCopy { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Collections.Generic.Stack`1&lt;class Xamarin.Forms.Page&gt; StackCopy" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.Stack&lt;Xamarin.Forms.Page&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="StackDepth">
+ <MemberSignature Language="C#" Value="public int StackDepth { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 StackDepth" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationPage.xml b/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationPage.xml
index 1004ed1e..f58b6d8f 100644
--- a/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationPage.xml
+++ b/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationPage.xml
@@ -1,6 +1,6 @@
<Type Name="NavigationPage" FullName="Xamarin.Forms.NavigationPage">
- <TypeSignature Language="C#" Value="public class NavigationPage : Xamarin.Forms.Page, Xamarin.Forms.IPageContainer&lt;Xamarin.Forms.Page&gt;" />
- <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit NavigationPage extends Xamarin.Forms.Page implements class Xamarin.Forms.IPageContainer`1&lt;class Xamarin.Forms.Page&gt;" />
+ <TypeSignature Language="C#" Value="public class NavigationPage : Xamarin.Forms.Page, Xamarin.Forms.INavigationPageController, Xamarin.Forms.IPageContainer&lt;Xamarin.Forms.Page&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit NavigationPage extends Xamarin.Forms.Page implements class Xamarin.Forms.INavigationPageController, class Xamarin.Forms.IPageContainer`1&lt;class Xamarin.Forms.Page&gt;" />
<AssemblyInfo>
<AssemblyName>Xamarin.Forms.Core</AssemblyName>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
@@ -16,6 +16,9 @@
</Base>
<Interfaces>
<Interface>
+ <InterfaceName>Xamarin.Forms.INavigationPageController</InterfaceName>
+ </Interface>
+ <Interface>
<InterfaceName>Xamarin.Forms.IPageContainer&lt;Xamarin.Forms.Page&gt;</InterfaceName>
</Interface>
</Interfaces>
@@ -419,7 +422,7 @@
<AttributeName>System.Diagnostics.DebuggerStepThrough</AttributeName>
</Attribute>
<Attribute>
- <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;PopAsync&gt;d__68))</AttributeName>
+ <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;PopAsync&gt;d__36))</AttributeName>
</Attribute>
</Attributes>
<ReturnValue>
@@ -515,7 +518,7 @@
<AttributeName>System.Diagnostics.DebuggerStepThrough</AttributeName>
</Attribute>
<Attribute>
- <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;PopToRootAsync&gt;d__71))</AttributeName>
+ <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;PopToRootAsync&gt;d__44))</AttributeName>
</Attribute>
</Attributes>
<ReturnValue>
@@ -572,7 +575,7 @@
<AttributeName>System.Diagnostics.DebuggerStepThrough</AttributeName>
</Attribute>
<Attribute>
- <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;PushAsync&gt;d__65))</AttributeName>
+ <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;PushAsync&gt;d__46))</AttributeName>
</Attribute>
</Attributes>
<ReturnValue>
@@ -811,5 +814,67 @@ public class MyPage : NavigationPage
<remarks>To be added.</remarks>
</Docs>
</Member>
+ <Member MemberName="Xamarin.Forms.INavigationPageController.PopAsyncInner">
+ <MemberSignature Language="C#" Value="System.Threading.Tasks.Task&lt;Xamarin.Forms.Page&gt; INavigationPageController.PopAsyncInner (bool animated, bool fast);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Threading.Tasks.Task`1&lt;class Xamarin.Forms.Page&gt; Xamarin.Forms.INavigationPageController.PopAsyncInner(bool animated, bool fast) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.DebuggerStepThrough</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.AsyncStateMachine(typeof(Xamarin.Forms.NavigationPage/&lt;Xamarin-Forms-INavigationPageController-PopAsyncInner&gt;d__61))</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Threading.Tasks.Task&lt;Xamarin.Forms.Page&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="animated" Type="System.Boolean" />
+ <Parameter Name="fast" Type="System.Boolean" />
+ </Parameters>
+ <Docs>
+ <param name="animated">To be added.</param>
+ <param name="fast">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Xamarin.Forms.INavigationPageController.StackCopy">
+ <MemberSignature Language="C#" Value="System.Collections.Generic.Stack&lt;Xamarin.Forms.Page&gt; Xamarin.Forms.INavigationPageController.StackCopy { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Collections.Generic.Stack`1&lt;class Xamarin.Forms.Page&gt; Xamarin.Forms.INavigationPageController.StackCopy" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.Stack&lt;Xamarin.Forms.Page&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Xamarin.Forms.INavigationPageController.StackDepth">
+ <MemberSignature Language="C#" Value="int Xamarin.Forms.INavigationPageController.StackDepth { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Xamarin.Forms.INavigationPageController.StackDepth" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
</Members>
</Type>
diff --git a/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationRequestedEventArgs.xml b/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationRequestedEventArgs.xml
new file mode 100644
index 00000000..550f755d
--- /dev/null
+++ b/docs/Xamarin.Forms.Core/Xamarin.Forms/NavigationRequestedEventArgs.xml
@@ -0,0 +1,122 @@
+<Type Name="NavigationRequestedEventArgs" FullName="Xamarin.Forms.NavigationRequestedEventArgs">
+ <TypeSignature Language="C#" Value="public class NavigationRequestedEventArgs : Xamarin.Forms.NavigationEventArgs" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit NavigationRequestedEventArgs extends Xamarin.Forms.NavigationEventArgs" />
+ <AssemblyInfo>
+ <AssemblyName>Xamarin.Forms.Core</AssemblyName>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>Xamarin.Forms.NavigationEventArgs</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NavigationRequestedEventArgs (Xamarin.Forms.Page page, bool animated, bool realize = true);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class Xamarin.Forms.Page page, bool animated, bool realize) cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="page" Type="Xamarin.Forms.Page" />
+ <Parameter Name="animated" Type="System.Boolean" />
+ <Parameter Name="realize" Type="System.Boolean" />
+ </Parameters>
+ <Docs>
+ <param name="page">To be added.</param>
+ <param name="animated">To be added.</param>
+ <param name="realize">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NavigationRequestedEventArgs (Xamarin.Forms.Page page, Xamarin.Forms.Page before, bool animated);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class Xamarin.Forms.Page page, class Xamarin.Forms.Page before, bool animated) cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="page" Type="Xamarin.Forms.Page" />
+ <Parameter Name="before" Type="Xamarin.Forms.Page" />
+ <Parameter Name="animated" Type="System.Boolean" />
+ </Parameters>
+ <Docs>
+ <param name="page">To be added.</param>
+ <param name="before">To be added.</param>
+ <param name="animated">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Animated">
+ <MemberSignature Language="C#" Value="public bool Animated { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance bool Animated" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="BeforePage">
+ <MemberSignature Language="C#" Value="public Xamarin.Forms.Page BeforePage { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class Xamarin.Forms.Page BeforePage" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Xamarin.Forms.Page</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Realize">
+ <MemberSignature Language="C#" Value="public bool Realize { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance bool Realize" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Task">
+ <MemberSignature Language="C#" Value="public System.Threading.Tasks.Task&lt;bool&gt; Task { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Threading.Tasks.Task`1&lt;bool&gt; Task" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>2.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Threading.Tasks.Task&lt;System.Boolean&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>