c# - 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, 0);
body_grid.Children.Add(barcode, 0, 1);
btn_2.Icon = "Back.png";
btn_2.Clicked += (sender, e) => {
btn_4.IconColor = Utilities.black;
Navigation.PopAsync();
};
}
我如何在 XAML 上执行最后一个代码并插入到body_grid
模板中?
解决方案
推荐阅读
- ios - 错误:在框架模块“UMPermissionsInterface.UMPermissionsInterface”中包含非模块化标头:
- c# - 启动 selenium 时出错:无法启动驱动程序服务
- java - Java Generic Type - 不能使用泛型类型作为参数
- javascript - 你如何在不同的文件中制作你的机器人命令?
- javascript - 带有 React Burger 菜单的 z-index 不起作用
- haskell - 在haskell中删除数组的元素
- java - jQuery ajax 只返回表数据而不返回 index.php 文件中的其他数据
- python - 可变大小图形的图例位置
- node.js - 使用 Twit 通过机器人发布视频
- python - django 开发显示插件(DjangoQLSearchMixin)但不在生产中