【问题标题】:Xamarin UWP + Android ContentPage Navigation PushAsyncXamarin UWP + Android ContentPage 导航 PushAsync
【发布时间】:2021-10-07 22:41:52
【问题描述】:

我正在将 UWP 应用程序转换为 Xamarin,以便在 Android 和 Windows 设备上使用它。 我以前从未使用过 Xamarin,我认为我犯了一个初学者错误。

在我的主页上一切正常:

但是当我点击“选项”按钮时,它没有加载新页面,除了窗口上部的灰色横幅:

要从一个页面导航到另一个页面,我按照以下说明进行操作:Microsoft doc navigation

我的代码可以在 MainPage.xaml.cs 中更改页面:

async void ButtonOptions_Click(object sender, EventArgs args)
    {
        try
        {
            button_options.Source = "Assets/Option_Icon_1.png";
            Application.Current.MainPage = new NavigationPage(new MainPage());
            var OptionsView = new OptionsView();
            await Device.InvokeOnMainThreadAsync(() => Navigation.PushAsync(OptionsView, true));
            //this.Frame.Navigate(typeof(StorageView1));
        }
        catch (Exception ex) { InterpretException("MainPage.ButtonStorage_Click()", ex); }
    }

还有我的 OptionsView.xaml:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Stock_Manager_Xamarin.OptionsView"
         Title="Second Page">
<ContentPage.Content>
    <StackLayout HorizontalOptions="Center" VerticalOptions="Center">
        <StackLayout Orientation="Horizontal">
            <Label Text="Name:" HorizontalOptions="FillAndExpand" />
            <Label Text="{Binding Name}" FontSize="Medium" FontAttributes="Bold" />
        </StackLayout>
            
        <Button x:Name="navigateButton" Text="Previous Page"/>
    </StackLayout>
</ContentPage.Content>

我尝试了不同版本的 xaml 代码而没有任何更改,但我找不到工作示例。 有人可以解释我在哪里做错了吗?

【问题讨论】:

  • 如果MainPage 已经是当前显示的内容,你为什么还要使用Application.Current.MainPage = new NavigationPage(new MainPage());
  • 我在另一个主题中读过它......但这显然是一个错误。 ColeX - MSFT 提供了解决方案。

标签: c# android xamarin uwp navigation


【解决方案1】:
  1. 将当前页面包裹在导航栈中App.cs,并设置为MainPage,这样我们就可以进行导航操作了。

    public App()
     {
         InitializeComponent();
    
         MainPage = new NavigationPage(new MainPage());
     } 
    
  2. 正如Jason所说,MainPage不需要重新设置,直接导航,修改代码如下。

    void ButtonOptions_Click(object sender, EventArgs args)
    {
        try
        {
            button_options.Source = "Assets/Option_Icon_1.png";
            var OptionsView = new OptionsView();
            Navigation.PushAsync(OptionsView, true);
        }
        catch (Exception ex) { InterpretException("MainPage.ButtonStorage_Click()", ex); }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多