浮出控件页无响应

Flyout Page not responding

提问人:Livio 提问时间:1/25/2023 更新时间:1/25/2023 访问量:426

问:

我开始通过在线视频了解 .Net MAUI。 我正在尝试自定义一个包含 3 个按钮的页面,其中 1 个用于计数器,1 个用于第二页,1 个用于浮出页面。 计数器和第二页正常,浮出控件页面不显示,但强制应用退出。 调用浮出控件页面的按钮的代码是这样的,位于 MainPage 中.xml.cs:

private void FlyClicked(object sender, EventArgs e)
{
    Navigation.PushAsync(new Flyout1());
}

谁能解释一下原因? 非常感谢

毛 伊 岛

评论

0赞 ToolmakerSteve 1/25/2023
“浮出控件页面不显示,但强制应用退出”也许是内容有问题。在 Flyout1 的构造函数中,我会放置它的所有代码行。然后是块中的断点。它会到达断点吗?如果是这样,请补充对例外的全文提出质疑。另一个测试是制作一个空白的浮出控件。无内容;尽可能简单。去那个也会崩溃吗?Flyout1try .. catch (Exception ex)catch
0赞 Livio 1/25/2023
感谢工具制造商史蒂夫的回答。我的浮出控件页面完全是空白的,但我不知道将 Try Catch 结构放在哪里......也许以这种方式?
0赞 H.A.H. 1/25/2023
如果我检查你的 App.xaml.cs,我不会在那里找到:MainPage = new AppShell();?我会把钱花在尝试同时使用导航页面和 Shell 上。如果是这样的话......你不能。
0赞 Livio 1/25/2023
“如果我检查你的App.xaml.cs,我不会在那里找到:MainPage = new AppShell();?”是的,有那条线......
1赞 H.A.H. 1/25/2023
@Livio Shell 导航完成,使用 Shell.Current.GoToAsync(...)。这样,您使用的路线与在任何网站中的导航没有太大区别。页面正在使用堆栈。想象一下一副纸牌,你把一张纸牌放在所有其他纸牌的上面,它就会被显示出来。Navigation.Push 方法将页面放入堆栈中。弹出 - 删除它。选项卡式,浮出控件 - 无关紧要。堆栈导航的概念与 Shell 导航不兼容。你有 URI 导航。

答:

1赞 Alexandar May - MSFT 1/25/2023 #1

根据你的描述,应为 FlyoutPage。您可以参考下面的代码来了解如何创建 .我测试它,它可以显示它。Flyout1FlyoutPage

浮出控件 1:

XAML:

<?xml version="1.0" encoding="utf-8" ?> 
<FlyoutPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiAppDualScreen.Flyout1"
             xmlns:local="clr-namespace:MauiAppDualScreen"
             >

    <FlyoutPage.Flyout>
        <local:FlyoutMenuPage x:Name="flyoutPage" />
    </FlyoutPage.Flyout>
    <FlyoutPage.Detail>
        <NavigationPage>
            <x:Arguments>
                <local:MainPage />
            </x:Arguments>
        </NavigationPage>
    </FlyoutPage.Detail>
</FlyoutPage>

代码隐藏:

public partial class Flyout1 : FlyoutPage
{
      public Flyout1()
      {
            InitializeComponent();
      }
}

以下示例显示了对象的定义,其类型为:FlyoutMenuPageContentPage

XAML:


<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiAppDualScreen.FlyoutMenuPage"
             xmlns:local="clr-namespace:MauiAppDualScreen"
             Title="FlyoutMenuPage">
    <CollectionView x:Name="collectionView"
                    x:FieldModifier="public"
                    SelectionMode="Single">
        <CollectionView.ItemsSource>
            <x:Array Type="{x:Type local:FlyoutPageItem}">
                <local:FlyoutPageItem Title="Contacts"
                                      IconSource="dotnet_bot.png"
                                      TargetType="{x:Type local:MainPage}" />
                <local:FlyoutPageItem Title="TodoList"
                                      IconSource="dotnet_bot.png"
                                      TargetType="{x:Type local:MainPage}" />
                <local:FlyoutPageItem Title="Reminders"
                                      IconSource="dotnet_bot.png"
                                      TargetType="{x:Type local:MainPage}" />
            </x:Array>
        </CollectionView.ItemsSource>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="5,10">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="30"/>
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Image Source="{Binding IconSource}" />
                    <Label Grid.Column="1"
                           Margin="20,0"
                           Text="{Binding Title}"
                           FontSize="20"
                           FontAttributes="Bold"
                           VerticalOptions="Center" />
                </Grid>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</ContentPage>

代码隐藏:

public partial class FlyoutMenuPage : ContentPage
{
      public FlyoutMenuPage()
      {
            InitializeComponent();
      }
}

浮出控件页由一个填充数据的页面组成,该页面通过将其属性设置为对象数组来填充数据。下面的示例演示该类的定义:CollectionViewItemsSourceFlyoutPageItemFlyoutPageItem

public class FlyoutPageItem
{
        public string Title { get; set; }
        public string IconSource { get; set; }
        public Type TargetType { get; set; }
}

评论

0赞 Livio 2/15/2023
对不起,我现在才注意到你的问题。是的,您的代码有效,非常感谢您的帮助!
0赞 Livio 2/15/2023
对不起,我是 Stackoverflow 的新手,所以我不知道如何接受......你能解释一下吗?谢谢!