demo-xf-app-1a/MobileApp1/Helpers/ContentViewHelper.cs

107 lines
2.6 KiB
C#
Raw Normal View History

2021-07-13 13:57:44 +00:00
using System;
using Xamarin.Forms;
namespace MobileApp1.Views
{
public class ContentViewHelper
{
public static App GetApp(ContentView view) => (App)GetParentElement<App>(view);
//{
// if (view == null) return null;
2021-07-13 13:57:44 +00:00
// Element item = view.Parent;
2021-07-13 13:57:44 +00:00
// while (true)
// {
// if (item == null) break;
// if (item is App) break;
2021-07-13 13:57:44 +00:00
// item = item.Parent;
// }
// return (item as App);
//}
public static Application GetApplication(ContentView view) => (Application)GetParentElement<Application>(view);
//{
// if (view == null) return null;
// Element item = view.Parent;
// while (true)
// {
// if (item == null) break;
// if (item is Application) break;
// item = item.Parent;
// }
// return (item as Application);
//}
public static ContentPage GetContentPage(ContentView view) => (ContentPage)GetParentElement<ContentPage>(view);
public static object GetParentElement<T>(ContentView view)
2021-07-13 13:57:44 +00:00
{
if (view == null) return default(T);
Element item = view.Parent;
while (true)
{
if (item == null) break;
if (item is T) break;
item = item.Parent;
}
//try
//{
// return (T)Convert.ChangeType(item, typeof(T));
//}
//catch (InvalidCastException)
//{
// return default(T);
//}
return item;
2021-07-13 13:57:44 +00:00
}
public static void SetMainPage(ContentView view, Page page)
{
if (view == null) return;
if (view.Parent == null) return;
if (page == null) return;
Application rs = GetApplication(view);
if (rs == null)
{
return;
}
Device.BeginInvokeOnMainThread(() =>
{
//rs.MainPage = new NavigationPage(new PasswordResetPage());
rs.MainPage = page;
});
}
public static async void PushMainPageNavigation(ContentView view, Page page)
{
if (view == null) return;
if (view.Parent == null) return;
if (page == null) return;
Application rs = GetApplication(view);
if (rs == null)
{
return;
}
await rs?.MainPage.Navigation.PushAsync(page);
}
}
}