Mostrar diferentes botones de la barra de herramientas en cada página con formularios Xamarin
xamarin.forms (2)
Una opción que tienes, y una que implementé en mi propia aplicación, es un procesador personalizado que elimina el encabezado de navegación de la aplicación y luego puedes construir tu propio encabezado personalizado. Con este enfoque, usted pierde algo de la sensación nativa de la aplicación, y tiene que implementar gran parte de la funcionalidad de transición. Sin embargo, le da mucho más control sobre el aspecto.
CustomRenderer que elimina la barra de navegación:
//add using statements
// add all view here that need this custom header, might be able to build a
//base page that others inherit from, so that this will work on all pages.
[assembly: ExportRenderer(typeof(yourView), typeof(HeaderRenderer))]
class HeaderRenderer : PageRenderer
{
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
this.NavigationController.SetNavigationBarHidden(true, true);
}
}
Después de esto, puede crear una vista de encabezado que se puede colocar en la parte superior de cada página (estoy usando xaml) por lo que no sé si es relevante en su aplicación.
Editar: es posible que deba cambiar este representador para diferentes tipos de página.
Tengo 2 páginas en mi aplicación Xamarin Forms. Mi primera página tiene 4 iconos en la barra de herramientas. Mi segunda página es una página de inicio de sesión y tiene un tic y una cruz en la barra de herramientas.
No puedo hacer que la página de inicio de sesión muestre ningún ícono a menos que lo convierta en una página de navegación. También tengo que borrar ToolBarItems en la primera página antes de llamar a PushAsync (), de lo contrario, se queja de que hay demasiados elementos en la barra de herramientas.
Si llamo a PopAsync () en la página de inicio de sesión, no regresa a la primera página. Supongo que esto se debe a que son 2 páginas de navegación. También probé PopToRootAsync (). Sin embargo, el botón Atrás funciona.
Mi pregunta es: ¿cómo puedo mostrar diferentes iconos de la barra de herramientas en 2 páginas diferentes de una manera que permita que la navegación funcione?
Estoy probando esto en Windows Phone 8.0
Aquí está el código que llama a la página de inicio de sesión:
private async void ShowLoginPage()
{
ToolbarItems.Clear();
var page = new NavigationPage(new LoginPage());
await Navigation.PushAsync(page);
}
y aquí está el código para regresar a la primera página:
private void Cancel()
{
Navigation.PopToRootAsync();
}
Estoy ejecutando Xamarin.Forms v1.2.2.6243
Una cosa que podría intentar es mantener su página de inicio de sesión dentro de una página de NavigationPage
, y luego en lugar de ejecutar PopAsync()
dentro de la página de inicio de sesión después de haber iniciado sesión exitosamente, simplemente reemplace la MainPage
con su página de navegación anterior:
En tu clase de aplicación:
public NavigationPage AppNavPage = new NavigationPage(new FirstPage());
public App() {
MainPage = AppNavPage;
}
En su FirstPage:
private async void ShowLoginPage() {
ToolbarItems.Clear();
var page = new NavigationPage(new LoginPage());
await Navigation.PushAsync(page);
}
En la página de inicio de sesión:
private async void OnCreateClicked(object sender, EventArgs e) {
bool loginInfoIsGood = CheckLoginInfo(); //Check their login info
if(loginInfoIsGood) {
Application.Current.MainPage = App.AppNavPage;
}
}
De lo contrario, también he hecho un renderizador personalizado para NavigationRenderer
en iOS para insertar elementos de la barra de herramientas en el lado derecho de la barra de navegación y he anulado algunas cosas relacionadas con el Menu
en Android para cambiar el texto / color del icono.