如何用UWP Xamarin形式的其他图标替换汉堡包图标

时间:2019-02-15 10:01:30

标签: xamarin xamarin.forms xamarin.uwp

我有一个应用程序,我添加了其他汉堡包图标,而不是默认的汉堡包图标。它可以在Android和iOS上使用,但不能在UWP中使用。有什么办法可以一致地改变图片吗?

1 个答案:

答案 0 :(得分:0)

我创建了一个项目,然后我在这个项目中更改了汉堡菜单图标的图标。

我在Android中有一个解决方案,但我认为在iOS中是相同的方式。

您必须创建一个Custom MasterDetailPageRenderer类,并且必须从OnLayout函数中更改图标。

项目 https://github.com/officialdoniald/Xamarin.Forms.CustomControls/blob/master/XamarinForms.CustomControls/XamarinForms.CustomControls.Android/CustomRenderer/MasterNavigationPageRenderer.cs

Android

[assembly: ExportRenderer(typeof(CustomMasterDetailPage), typeof(MasterNavigationPageRenderer))]
namespace XamarinForms.CustomControls.Droid.CustomRenderer
{

    public class MasterNavigationPageRenderer : MasterDetailPageRenderer
    {
        private static Android.Support.V7.Widget.Toolbar GetToolbar() => (CrossCurrentActivity.Current?.Activity as MainActivity)?.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);

        private Android.Support.V7.Widget.Toolbar toolbar;

        public MasterNavigationPageRenderer() : base() { }

        public MasterNavigationPageRenderer(Context context) : base(context) { }

        public MasterNavigationPageRenderer(IntPtr a, JniHandleOwnership b) : base() { }

    protected override void OnLayout(bool changed, int l, int t, int r, int b)
    {
        base.OnLayout(changed, l, t, r, b);
        toolbar = GetToolbar();
        if (toolbar != null)
        {
            SetNavigationButton(Resource.Drawable.menu);
        }
    }
    private void SetNavigationButton(int resourceID)
    {
        var icon = Forms.Context.GetDrawable(resourceID);
        using (var drawable = ((BitmapDrawable)icon).Bitmap)
        using (var bitmap = Bitmap.CreateScaledBitmap(drawable, 80, 80, false))
        using (var newDrawable = new BitmapDrawable(Resources, bitmap))
        {
            toolbar.NavigationIcon = newDrawable;
        }
    }
}