我想在 AppShell 的 FlyoutItem 中捕获点击事件或命令时遇到问题。目前我有以下 Shell。
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:views="clr-namespace:abc.Views.Courier"
xmlns:out="clr-namespace:abc.Views"
xmlns:local="clr-namespace:abc.Views.FlyOut"
x:Class="abc.CourierShell">
<!--<Shell.Resources>
<Shell.FlyoutHeader>
<local:HeaderContentView />
</Shell.FlyoutHeader>
<FlyoutItem Title="Home" >
<Tab>
<ShellContent ContentTemplate="{DataTemplate views:CourierMainPage}" />
</Tab>
</FlyoutItem>
<FlyoutItem Title="Logout" >
<Tab>
<ShellContent ContentTemplate="{DataTemplate out:LoginPage}" />
</Tab>
</FlyoutItem>
</Shell>
我想捕获要放置弹出窗口的注销,并在用户单击它时清除一些日志。
到目前为止,我正在尝试研究如何去做,因为我对移动开发非常陌生。
在您的中添加路线ShellContent
:
<FlyoutItem Title="Logout">
<Tab>
<ShellContent Route="LoginPage" ContentTemplate="{DataTemplate out:LoginPage}" />
</Tab>
</FlyoutItem>
然后在您的 AppShell.xaml.cs 中覆盖它:
protected override async void OnNavigating(ShellNavigatingEventArgs args)
{
base.OnNavigating(args);
var PageUri = args.Target.Location.OriginalString;
if (PageUri == "//LoginPage")
{
ShellNavigatingDeferral token = args.GetDeferral();
bool answer
= await DisplayAlert("Logout?", "Do you want to logout?", "Yes", "No");
if (answer)
{
token.Complete();
}
}
}
应该是“//LoginPage”,也可以在这一行打断点:var PageUri = args.Target.Location.OriginalString;
获取LoginPage的值。
请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
遇到问题 @jianwei-sun-msft 我不想重定向到{DataTemplate out:LoginPage}用户单击“确定”之前。我是这样做的 bool answer = await DisplayAlert("Logout?", "Do you want to logout?", "Yes", "No");
@vcargo 我根据您的需要更新了答案。它运作良好。但愿能帮到你。