【问题标题】:Xamarin switch between pages without loading new oneXamarin 在页面之间切换而不加载新页面
【发布时间】:2019-03-17 15:21:24
【问题描述】:

如何在不加载新页面的情况下在 Xamarin 中切换页面,这样当我对页面进行更改并在同一会话中再次加载时,我可以看到所做的更改,但是当我关闭应用程序并再次打开它,更改消失了吗?

如您所见,当我转到“Doel sport”页面并返回“Doel gewicht”页面时,单选按钮仍处于选中状态。但是当我回到“Doel sport”页面时,单选按钮不再被选中(页面加载了两次,我不知道为什么?)

“Doel gwicht”页面 xaml:

<controls:AnimationPage
        xmlns:controls="clr-namespace:FormsControls.Base;assembly=FormsControls.Base" xmlns="http://xamarin.com/schemas/2014/forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
        x:Class="TimeToSport.Views.GegevensGewichtDoel"
        xmlns:syncfusion="clr-namespace:Syncfusion.XForms.Buttons;assembly=Syncfusion.Buttons.XForms"
        Title="Doel gewicht">


<ContentPage.ToolbarItems>
    <ToolbarItem Text="Volgende" Clicked="Volgende_clicked">
        <ToolbarItem.Icon>
            <OnPlatform x:TypeArguments="FileImageSource">
                <On Platform="UWP" Value="volgende.png"/>
            </OnPlatform>
        </ToolbarItem.Icon>
    </ToolbarItem>
</ContentPage.ToolbarItems>

<ContentPage.Content>

    <StackLayout Orientation="Horizontal"  
                 HorizontalOptions="FillAndExpand"  
                 VerticalOptions="FillAndExpand"  
                 Padding="10,30,0,0"  
                 Spacing="10">


        <syncfusion:SfRadioGroup x:Name="radioGroup">

            <Label Text="Wat is je doel m.b.t. gewicht?"  TextColor="Black" FontSize="17"/>
            <syncfusion:SfRadioButton x:Name="btn_Afvallen" Text="Afvallen" TextColor="Gray" StateChanged="RadioButton_StateChanged"/>
            <syncfusion:SfRadioButton x:Name="btn_OpGewichtBlijven" TextColor="Gray" Text="Op gewicht blijven" StateChanged="RadioButton_StateChanged"/>
            <syncfusion:SfRadioButton x:Name="btn_Aankomen" TextColor="Gray" Text="Aankomen" StateChanged="RadioButton_StateChanged"/>
        </syncfusion:SfRadioGroup>    
         </StackLayout>
     </ContentPage.Content>
 </controls:AnimationPage>

“Doel gwicht”页面cs:

        void CreateRadioButtons()
    {
        SfRadioGroup radioGroup = new SfRadioGroup();
        SfRadioButton btn_Afvallen = new SfRadioButton();
        btn_Afvallen.IsChecked = false;
        btn_Afvallen.Text = "Afvallen";
        btn_Afvallen.StateChanged += RadioButton_StateChanged;
        SfRadioButton btn_OpGewichtBlijven = new SfRadioButton();
        btn_OpGewichtBlijven.Text = "Op gewicht blijven";
        btn_OpGewichtBlijven.StateChanged += RadioButton_StateChanged;
        SfRadioButton btn_Aankomen = new SfRadioButton();
        btn_Aankomen.Text = "Aankomen";
        btn_Aankomen.StateChanged += RadioButton_StateChanged;
        radioGroup.Children.Add(btn_Afvallen);
        radioGroup.Children.Add(btn_OpGewichtBlijven);
        radioGroup.Children.Add(btn_Aankomen);
    }

    private void RadioButton_StateChanged(object sender, StateChangedEventArgs e)
    {
        Navigation.PushAsync(new GegevensSportDoel());
    }

    void Volgende_clicked(object sender, EventArgs e)
    {
        Navigation.PushAsync(new GegevensSportDoel());
    }

“Doel Sport”页面 xaml:

<controls:AnimationPage.PageAnimation>
    <controls:PushPageAnimation Duration="Medium" Subtype="FromRight" />
</controls:AnimationPage.PageAnimation>

<ContentPage.ToolbarItems>
    <ToolbarItem Text="Klaar" Clicked="Klaar_clicked">
        <ToolbarItem.Icon>
            <OnPlatform x:TypeArguments="FileImageSource">
                <On Platform="UWP" Value="volgende.png"/>
            </OnPlatform>
        </ToolbarItem.Icon>
    </ToolbarItem>
</ContentPage.ToolbarItems>

<ContentPage.Content>

    <StackLayout Orientation="Horizontal"  
                 HorizontalOptions="FillAndExpand"  
                 VerticalOptions="FillAndExpand"  
                 Padding="10,30,0,0"  
                 Spacing="10">


        <syncfusion:SfRadioGroup x:Name="radioGroup">

            <Label Text="Wat is je doel m.b.t. sport?"  TextColor="Black" FontSize="17"/>
            <syncfusion:SfRadioButton x:Name="btn_SterkerWorden" Text="Afvallen" TextColor="Gray" />
            <syncfusion:SfRadioButton x:Name="btn_ConditieOpbouwen" TextColor="Gray" Text="Op gewicht blijven" />
            <syncfusion:SfRadioButton x:Name="btn_GeenVanBeide" TextColor="Gray" Text="Aankomen"/>
        </syncfusion:SfRadioGroup>


         </StackLayout>
     </ContentPage.Content>
 </controls:AnimationPage>

“Doel Sport”页面cs:

    void CreateRadioButtons()
    {
        SfRadioGroup radioGroup = new SfRadioGroup();
        SfRadioButton btn_Afvallen = new SfRadioButton();
        btn_Afvallen.IsChecked = false;
        btn_Afvallen.Text = "Afvallen";
        SfRadioButton btn_OpGewichtBlijven = new SfRadioButton();
        btn_OpGewichtBlijven.Text = "Op gewicht blijven";
        SfRadioButton btn_Aankomen = new SfRadioButton();
        btn_Aankomen.Text = "Aankomen";
        radioGroup.Children.Add(btn_Afvallen);
        radioGroup.Children.Add(btn_OpGewichtBlijven);
        radioGroup.Children.Add(btn_Aankomen);
    }

    void Klaar_clicked(object sender, EventArgs e)
    {
        App.Current.MainPage = new NavigationPage(new ItemsPage());
    }

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

    您只需要维护对新 Page 对象的引用,而不是每次都创建一个新对象

    ItemsPage newPage = null;
    
    void Klaar_clicked(object sender, EventArgs e)
    {
        if (newPage == null) {
          newPage = new ItemsPage()
        }
    
        App.Current.MainPage = new NavigationPage(newPage);
    }
    

    【讨论】:

    • 感谢您的回复!我使用了以下代码pastebin.com/qbEAjMS5。当我单击第一页上的按钮,然后转到第二页,然后返回然后单击另一个按钮(然后选择了一个按钮)时,它崩溃并给我以下错误:System.InvalidOperationException: Page must not already have a parent. 为什么是那个?
    • 您可能需要将 ref 保存到导航页面,而不是将现有的 ItemPage 包装在新的导航页面中
    • 忘了提到错误来自 pastebin 文件的第 10 行,所以很遗憾您的解决方案不起作用。
    • 我已经多次使用这种技术,它应该可以工作。除非您尝试在从堆栈中删除页面之前推送相同的页面实例。
    • 是的,但是错误不是来自App.Current.MainPage = new NavigationPage(newPage);而是来自Navigation.PushAsync(gegevensSportDoel);,所以我不太明白你的意思是我必须改变?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多