Если вы хотите настроить изображение для панели навигации, я написал простую демонстрацию для этой проблемы.Вы можете обратиться к нему.
Прежде всего, вы можете создать новый класс, расширяющий NavigationPage и скопировать изображение в папку «drawable» в проекте Android.
public class MyCustomNavigation : NavigationPage
{
public MyCustomNavigation(Page page) : base(page)
{
}
public static readonly BindableProperty BarBackgroundProperty = BindableProperty.CreateAttached(
"BarBackground",
typeof(string),
typeof(MyCustomNavigation), string.Empty);
public static string GetBarBackground(BindableObject view)
{
return (string)view.GetValue(BarBackgroundProperty);
}
public static void SetBarBackground(BindableObject view, string value)
{
view.SetValue(BarBackgroundProperty, value);
}
}
Затем вы можете создатьСтраница содержимого, которая устанавливает фон для страницы навигации.
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class BarBackgroundPage : ContentPage
{
public BarBackgroundPage ()
{
InitializeComponent();
Title = "Monkey Title";
MyCustomNavigation.SetBarBackground(this, "monkeybackground");
}
}
В конце концов, вы можете создать класс CustomNavigationPageRenderer в папке Renderers проекта Android.
[assembly: ExportRenderer(typeof(MyCustomNavigation), typeof(CustomNavigationPageRenderer))]
namespace App4.Droid.Renderers
{
public class CustomNavigationPageRenderer : NavigationPageRenderer
{
Android.Support.V7.Widget.Toolbar _toolbar;
Drawable _originalToolbarBackground;
Drawable _originalWindowContent;
Android.Widget.FrameLayout _parentLayout;
public CustomNavigationPageRenderer(Context context) : base(context)
{
}
protected override void SetupPageTransition(Android.Support.V4.App.FragmentTransaction transaction, bool isPush)
{
Page lastPage = null;
if (isPush)
{
lastPage = Element?.Navigation?.NavigationStack?.Last();
lastPage.PropertyChanged += LastPage_PropertyChanged;
}
}
private void LastPage_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
var lastPage = sender as Page;
UpdateToolbarBackground(_toolbar, lastPage, Context as Activity, _originalToolbarBackground);
}
private void UpdateToolbarBackground(Android.Support.V7.Widget.Toolbar toolbar, Page lastPage, Activity activity, Drawable originalToolbarBackground)
{
string Picname = MyCustomNavigation.GetBarBackground(lastPage);
int resid = this.Context.Resources.GetIdentifier(Picname, "drawable", Android.App.Application.Context.PackageName);
toolbar.SetBackgroundResource(resid);
}
public override void OnViewAdded(Android.Views.View child)
{
base.OnViewAdded(child);
if(child.GetType()==typeof(Android.Support.V7.Widget.Toolbar))
{
var lastPage = Element?.Navigation?.NavigationStack?.Last();
_toolbar = (Android.Support.V7.Widget.Toolbar)child;
_originalToolbarBackground = _toolbar.Background;
var originalContent = (Context as Activity)?.Window?.DecorView?.FindViewById<FrameLayout>(Window.IdAndroidContent);
if (originalContent != null)
{
_originalWindowContent = originalContent.Foreground;
}
_parentLayout = new Android.Widget.FrameLayout(_toolbar.Context)
{
LayoutParameters = new Android.Widget.FrameLayout.LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent)
};
}
}
}
}
Если вы хотите узнать больше информации о костюмах Navigation, вы можете открыть эту ссылку и скачайте проект.