我有问题。我创建了一个包含内容的shellpage。现在,我想在shell中设置名为TransitionNavigationPage
的页面的自定义类型。如果我在没有外壳的情况下设置了代码,请执行以下操作:
App.Current.MainPage = new Controls.TransitionNavigationPage(new HomePage());
但是现在它在Shell中,所以我尝试了这个:
var transitionNavigationPage = new PageTransitionControls.TransitionNavigationPage(new HomePage());
MainShell.Items[0].Items[0].Items[0].ContentTemplate = new DataTemplate(typeof(transitionNavigationPage));
但是那给了我错误:
transitionNavigationPage是一个变量,但是像类型一样使用
这是TransitionNavigationPage类的代码:
public class TransitionNavigationPage : NavigationPage
{
public static readonly BindableProperty TransitionTypeProperty =
BindableProperty.Create("TransitionType", typeof(TransitionType), typeof(TransitionNavigationPage), TransitionType.SlideFromLeft);
public TransitionType TransitionType
{
get { return (TransitionType)GetValue(TransitionTypeProperty); }
set { SetValue(TransitionTypeProperty, value); }
}
public TransitionNavigationPage() : base()
{
}
public TransitionNavigationPage(Page root) : base(root)
{
}
}
那么如何在外壳内容中设置自定义NavigationPage?
基本上,您的问题是概念之一,正如我所看到的。您正在尝试结合两种不同的Navigation范例! Shell
的整个想法是提供与NavigationPage
可用的不同的Navigation范例,因此我的建议是:重新考虑您的方法。
由于我所见,使用自定义NavigationPage
的唯一目的是定义BindableProperty
TransitionType
,我建议您以类似的方式创建自定义Shell
,如下所示:
public class TransitionShellPage : Shell
{
public static readonly BindableProperty TransitionTypeProperty =
BindableProperty.Create("TransitionType", typeof(TransitionType), typeof(TransitionNavigationPage), TransitionType.SlideFromLeft);
public TransitionType TransitionType
{
get { return (TransitionType)GetValue(TransitionTypeProperty); }
set { SetValue(TransitionTypeProperty, value); }
}
}
然后,在AppShell
中而不是从Shell
继承,而是从TransitionShellPage
继承。
有关Shell的更多信息,请查看MSDN docu,或来自Eduardo Rosas的与此主题相关的其他文章。