Xamarin.forms Xamarin表单检查页面是否为模态
所以基本上我是想找出一个页面是不是被按模式推的 以下是我的扩展方法的代码:Xamarin.forms Xamarin表单检查页面是否为模态,xamarin.forms,mvvm,Xamarin.forms,Mvvm,所以基本上我是想找出一个页面是不是被按模式推的 以下是我的扩展方法的代码: public static bool IsModal(this Page page) { return page.Navigation.ModalStack.Any(p => page == p); } 问题是,p从不等于page,因为p在运行时更改了导航页面,尽管intellisense在编译时将其报告为页面类型 我曾尝试将p强制转换为页面,但类型在运行时没有改变,intellisense只是抱怨强制转
public static bool IsModal(this Page page)
{
return page.Navigation.ModalStack.Any(p => page == p);
}
问题是,p
从不等于page
,因为p
在运行时更改了导航页面,尽管intellisense在编译时将其报告为页面类型
我曾尝试将p
强制转换为页面,但类型在运行时没有改变,intellisense只是抱怨强制转换是多余的
我在视图模型中使用CurrentPage.IsModal
来调用此扩展CurrentPage
是编译时的一种页面类型,但在运行时会更改为NavigationPage
令人困惑的是,在调试过程中,
p
具有诸如CurrentPage
和RootPage
等属性,这些属性显示在调试器中,但使用p.CurrentPage
无法访问,因为编译器抱怨它们不存在!?!我想试着比较一下,但我不能访问它们,但可以在调试器中查看它们。你能试试这个吗,可能会有打字错误,我徒手写了这个
public static bool IsModal(this Page page)
{
if (page.Navigation.ModalStack.Count > 0)
{
foreach (var thisPage in page.Navigation.ModalStack)
{
if (thisPage.Equals(page))
return true;
}
return false;
}
else
return false;
}
因此,该代码起作用:
public static class PageExtensions
{
public static bool IsModal(this Page page)
{
return page.Navigation.ModalStack.Any(p=> ((NavigationPage) p).CurrentPage.Equals(page));
}
}
我担心这是不安全的,因为它假定
p
是导航页面的一种类型。您需要首先检查页面的类型,没有导航栏的页面也可以通过以下方式推送:
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void Button_Clicked(object sender, EventArgs e)
{
Page1 p = new Page1();
await this.Navigation.PushModalAsync(p, true);
bool b = PageExtensions.IsModal(p);
Console.WriteLine(b);
}
}
public static class PageExtensions
{
public static bool IsModal(this Page page)
{
if (page.GetType() == typeof(NavigationPage))
{
return page.Navigation.ModalStack.Any(p => ((NavigationPage)p).CurrentPage.Equals(page));
}
else
{
return page.Navigation.ModalStack.Any(p => p.Equals(page));
}
}
}
您的语法是正确的,但是比较仍然失败。我尝试过类似的代码,使用==或equals比较器,它们都失败了。这与迭代page.Navigation.ModalStack有关,类型是NavigationPage而不是page。简单的强制转换不起作用,因为编译器在运行时认为页面已经是页面了。谢谢Jack,我已经将此标记为答案,尽管它与我的非常相似。当我发现演员阵容可能会失败时,它增加了页面类型检查的清晰度。