XAMARIN 在点击 ShellContent (DataTemplate) 后阻止页面加载
XAMARIN prevent page loading after tap on ShellContent (DataTemplate)
我的 android 应用取得了一些进展。目前我正在努力寻找解决这个问题的办法
(我的旧问题中的代码参考 Creating nested navigation in Xamarin shell)
作为选择器的工作,将选择此DataTemplate作为NavigationHeadeTemplate
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
if (item is ShellGroupItem && list.Contains(((ShellGroupItem)item).Title))
{
// Make sure a header item is not clickable.
((ShellGroupItem)item).IsEnabled = false;
return NavigationHeaderTemplate;
}
else
return NavigationItemTemplate;
}
到目前为止,Selector 只检查一次每个 NavigationHeaderTemplate(它应该是),而对于 NavigationItemTemplate,它会在每次可见性变化时检查(它可能应该是,它不是很理想,但它工作正常)
第一次点击 NavigationHeaderTemplate 后,它只会更改其项目的可见性(这是正确的),但再次点击后,它会改变可见性并转到 AboutPage。
正如您在选择阶段看到的 NavigationHeaderTemplate 应该设置为 disabled
((ShellGroupItem)item).IsEnabled = false;
但不知何故,在第二次点击时它会转到关于页面。
<ShellContent Title="Header" ContentTemplate="{DataTemplate local:AboutPage}"/>
我的问题是:
如何防止页眉加载页面,它应该只改变项目的可见性(项目用于链接)
这行不通
<ShellContent Title="Header" ContentTemplate="{DataTemplate local:AboutPage}" IsEnabled="False"/>
After first tap on NavigationHeaderTemplate it only changes visibility of its items (thats correct) but after another tap it changes visibility and goes to AboutPage.
您可以尝试通过以下代码更改 FlyoutItemTemplateSelector:
public class FlyoutItemTemplateSelector : DataTemplateSelector
{
public DataTemplate NavigationHeaderTemplate { get; set; }
public DataTemplate NavigationItemTemplate { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
if (item is ShellGroupItem && ((ShellGroupItem)item).Title == "Header")
{
// Make sure a header item is not clickable.
((ShellGroupItem)item).IsEnabled = false;
return NavigationHeaderTemplate;
}
else
return NavigationItemTemplate;
}
}
我点击 header 一次或多次,它只会改变其项目的可见性。
我的 android 应用取得了一些进展。目前我正在努力寻找解决这个问题的办法
(我的旧问题中的代码参考 Creating nested navigation in Xamarin shell)
作为选择器的工作,将选择此DataTemplate作为NavigationHeadeTemplate
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
if (item is ShellGroupItem && list.Contains(((ShellGroupItem)item).Title))
{
// Make sure a header item is not clickable.
((ShellGroupItem)item).IsEnabled = false;
return NavigationHeaderTemplate;
}
else
return NavigationItemTemplate;
}
到目前为止,Selector 只检查一次每个 NavigationHeaderTemplate(它应该是),而对于 NavigationItemTemplate,它会在每次可见性变化时检查(它可能应该是,它不是很理想,但它工作正常)
第一次点击 NavigationHeaderTemplate 后,它只会更改其项目的可见性(这是正确的),但再次点击后,它会改变可见性并转到 AboutPage。 正如您在选择阶段看到的 NavigationHeaderTemplate 应该设置为 disabled
((ShellGroupItem)item).IsEnabled = false;
但不知何故,在第二次点击时它会转到关于页面。
<ShellContent Title="Header" ContentTemplate="{DataTemplate local:AboutPage}"/>
我的问题是: 如何防止页眉加载页面,它应该只改变项目的可见性(项目用于链接)
这行不通
<ShellContent Title="Header" ContentTemplate="{DataTemplate local:AboutPage}" IsEnabled="False"/>
After first tap on NavigationHeaderTemplate it only changes visibility of its items (thats correct) but after another tap it changes visibility and goes to AboutPage.
您可以尝试通过以下代码更改 FlyoutItemTemplateSelector:
public class FlyoutItemTemplateSelector : DataTemplateSelector
{
public DataTemplate NavigationHeaderTemplate { get; set; }
public DataTemplate NavigationItemTemplate { get; set; }
protected override DataTemplate OnSelectTemplate(object item, BindableObject container)
{
if (item is ShellGroupItem && ((ShellGroupItem)item).Title == "Header")
{
// Make sure a header item is not clickable.
((ShellGroupItem)item).IsEnabled = false;
return NavigationHeaderTemplate;
}
else
return NavigationItemTemplate;
}
}
我点击 header 一次或多次,它只会改变其项目的可见性。