ContentViews Xamarin 之间的导航

问题描述

我正在对我的应用进行导航。我需要完全控制导航,让用户仅在我希望他这样做时返回,控制他返回的页面,可能是最后一页,也可能是主菜单或它们之间的其他页面。对我来说,控制它的简单方法是使用以下操作:

Navigation.InsertPageBefore(new NotAccesableGoBackPage(),this);
Navigation.PopAsync(false);

Navigation.PushAsync(new AccesableGoBackPage());

App.Current.MainPage = new NavigationPage(new DestroyNavigationStack());

通过组合这些,我可以完全控制我的导航。现在我的问题。我希望在我的页面之间始终共享页眉、控制按钮和页脚模板。我阅读并发现我需要将 ContentView 用于模板,将 ContentPage 用于正文。但是通过使用 ContentsView,我无法使用我正在使用的导航。

我该如何解决这个问题?有什么推荐吗?谢谢。

编辑:

这是我的模板。它有页眉、按钮和页脚:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
             xmlns:dxe="http://schemas.devexpress.com/xamarin/2014/forms/editors"
             x:Class="NoguianaNucleo.Views.ContainerPage"
             NavigationPage.HasNavigationBar="false">
    
    <Grid>
        <Grid.ColumnDeFinitions>
            <ColumnDeFinition/>
        </Grid.ColumnDeFinitions>
        <Grid.RowDeFinitions>
            <!--Header -->
            <RowDeFinition Height="2*"/>
            <!--Body -->
            <RowDeFinition Height="24*"/>
            <!--Buttons -->
            <RowDeFinition Height="3*"/>
            <!--Footer -->
            <RowDeFinition Height="2*"/>
        </Grid.RowDeFinitions>
        <!--Header -->
        <Label x:Name="lbl_title" x:FieldModifier="public" Grid.Row="0"/>
        <!--Body -->
        <Grid x:Name="body_grid" Grid.Row="1" x:FieldModifier="public"/>
        <!--Buttons -->
        <Grid Grid.Row="2" BackgroundColor="#C8A2C8">
            <Grid.ColumnDeFinitions>
                <!--B1 -->
                <ColumnDeFinition/>
                <!--B2 -->
                <ColumnDeFinition/>
            </Grid.ColumnDeFinitions>
            <Grid.RowDeFinitions>
                <RowDeFinition/>
            </Grid.RowDeFinitions>
            <!--B1 -->
            <dxe:SimpleButton x:Name="btn_1" x:FieldModifier="public" Grid.Row="0" Grid.Column="0"/>
            <!--B2 -->
            <dxe:SimpleButton x:Name="btn_2" x:FieldModifier="public" Grid.Row="0" Grid.Column="1"/>
        </Grid>
        <!--Footer -->
        <Label x:Name="lbl_footer" x:FieldModifier="public" Grid.Row="3"/>
    </Grid>
</ContentPage>

这是我用于模板的 C# 控件:

public partial class ContainerPage : ContentPage {
    public ContainerPage() {
        InitializeComponent();
        lbl_footer.Text = "Footer";
    }
}

这是我的正文 (XAML) 的内容

<?xml version="1.0" encoding="utf-8" ?>
<views:ContainerPage  xmlns:views="clr-namespace:NoguianaNucleo.Views"
             xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="NoguianaNucleo.Views.Gestion.ConsultationEmplacementPage">

</views:ContainerPage>

Y 主体的 C#:

public ConsultationEmplacementPage() {
    InitializeComponent();

    //Title
    lbl_title.Text = "Lorem ipsu...";

    //Text
    Label info = new Label();
    info.Text = "Lorem ipsu...";

    body_grid.Children.Add(info,0);
    body_grid.Children.Add(barcode,1);

    btn_2.Icon = "Back.png";
    btn_2.Clicked += (sender,e) => {
        btn_4.IconColor = Utilities.black;
        Navigation.PopAsync();
    };
}

如何在 XAML 上执行最后一段代码并将其插入到模板的 body_grid 中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)