xamarin 禁用. net MAUI中FlyoutItem内ShellContent的单击

laik7k3q  于 2023-06-20  发布在  Shell
关注(0)|答案(1)|浏览(158)

我有一个问题,我不能禁用点击的ShellContent内FlyoutItem。更具体地说,我在FlyoutItem中放置了大量ShellContent,并选择将其显示为多个项目。

<FlyoutItem Title="Title" FlyoutDisplayOptions="AsMultipleItems">
        <ShellContent Title="🔁      Сontinuous" ContentTemplate="{DataTemplate views:MainPage}" IsEnabled="True"/>
        <ShellContent Title="🔔      Jingle Bells" ContentTemplate="{DataTemplate views:JingleBellsPage}" />
        <ShellContent Title="💓      Heartbeat " ContentTemplate="{DataTemplate views:heartbeatPage}" />
        <ShellContent Title="❤️      Love" ContentTemplate="{DataTemplate views:LovePage}" IsEnabled="False"/>
    </FlyoutItem>

My FlyoutItem
我尝试禁用ShellContent的可点击性,它位于FlyoutItem中,IsEnable ="false",如上面的代码所示,但当我单击时,它仍然会转到页面。它不应该转到页面。如果我这样做,它会工作,但会有一个恼人的动画。
Working variant
如何为具有许多ShellContent的FlyoutItem执行此操作?

<FlyoutItem Title="Main Page">
        <Tab IsEnabled="False">
            <ShellContent ContentTemplate="{DataTemplate views:MainPage}"></ShellContent>
        </Tab>
    </FlyoutItem>

    <FlyoutItem Title="Disco Page" IsEnabled="False">
        <Tab>
            <ShellContent ContentTemplate="{DataTemplate views:DiscoPage}"></ShellContent>
        </Tab>
    </FlyoutItem>

    <FlyoutItem Title="Love Page">
        <Tab>
            <ShellContent ContentTemplate="{DataTemplate views:LovePage}"></ShellContent>
        </Tab>
    </FlyoutItem>```
mrfwxfqh

mrfwxfqh1#

是的,为ShellContent设置IsEnable是无用的。所以你可以在代码后面拦截navigate事件。考虑以下方式:
首先,为每个shellContent指定一个路由,

<FlyoutItem Title="Title" FlyoutDisplayOptions="AsMultipleItems">
    <ShellContent Title="🔁      Сontinuous"    Route="Сontinuous" ContentTemplate="{DataTemplate local:MainPage}" IsEnabled="True"/>
    <ShellContent Title="🔔      Jingle Bells"  Route="Jingle Bells"   ContentTemplate="{DataTemplate local:JingleBellsPage}" />
    <ShellContent Title="💓      Heartbeat "    Route="Heartbeat"  ContentTemplate="{DataTemplate local:heartbeatPage}" />
    <ShellContent Title="❤️      Love"          Route="Love"  ContentTemplate="{DataTemplate local:LovePage}" IsEnabled="False"/>

</FlyoutItem>

然后在AppShell.cs中

protected override void OnNavigating(ShellNavigatingEventArgs args)
{
    base.OnNavigating(args);
    
    //If the route is "Heartbeat", then won't navigate
    if (args.Target.Location.OriginalString.Contains("Heartbeat"))
    {
        this.FlyoutBehavior = FlyoutBehavior.Locked; // this can let the flyout stay there after click the ShellContent
        args.Cancel();
        this.FlyoutBehavior = FlyoutBehavior.Flyout;
    }
}

希望能成功。

相关问题