簡體   English   中英

如何在Xamarin Forms的MasterDetailPage中禁用母版頁

[英]How to disable Master page in MasterDetailPage of Xamarin Forms

我正在使用Xamarin表單,並且需要根據用戶是否登錄來禁用用作上下文菜單的Master頁。 我有“ Master和“ Detail頁面作為單獨的XAML頁面。

  <MasterDetailPage.Master>
    <view:MenuPage/>
  </MasterDetailPage.Master>

  <MasterDetailPage.Detail>
    <view:MainViewPage 
      x:Name="MainView"/>
  </MasterDetailPage.Detail> 

您可能已經猜到了,我試圖在此處合並MVVM ,所以我嘗試了綁定可見性( IsVisible )和啟用( IsEnabledMaster頁屬性,但是,當按導航按鈕訪問我的IsEnabled時,我仍然會得到不希望的黑色淡入效果菜單。 相反,我需要完全吃完按鈕按下動作。

無論何時與用戶連接,您的頁面都應該可見嗎? 還是例如在應用程序的開頭有登錄頁面?

如果沒有兩個連接的用戶都可以看到的頁面,則可以通過將登錄頁面或其他頁面定義為ContentPage來實現該頁面。 它將占用所有屏幕空間並隱藏navigationBar。 然后,在用戶連接后,您將頁面稱為MasterDetailPage,然后將獲得您的navigationBar,...

不知道這是您要找的東西,但我希望我能為您提供幫助。

通過使用自定義邏輯覆蓋抽屜圖標的Click事件,可以使用自定義的NavigationRenderer實現。

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationPageRenderer))]
namespace RTW.Mobile.App.Droid.Renderers
{
    public class CustomNavigationPageRenderer : NavigationPageRenderer, IMessageSender
    {
        protected override void OnLayout(bool changed, int l, int t, int r, int b)
        {
            base.OnLayout(changed, l, t, r, b);

            var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            for (var i = 0; i < toolbar.ChildCount; i++)
            {
                var imageButton = toolbar.GetChildAt(i) as ImageButton;
                var drawerArrow = imageButton?.Drawable as DrawerArrowDrawable;

                if (drawerArrow == null)
                    continue;

                //ensure only one handler is registered
                imageButton.Click -= imageButton_Click;
                imageButton.Click += imageButton_Click;
            }
        }

        private void imageButton_Click(object sender, EventArgs e)
        {
            if (!App.IsBlockingConditionTrue)
            {
                MessagingCenter.Send<IMessageSender>(this, "ToggleMasterIsPresented");
            }
        }
    }
}

然后只需使用MessagingCenter.Subscribe<IMessageSender>(this, "ToggleMasterIsPresented", OnToggleMasterIsPresented);訂閱該消息MessagingCenter.Subscribe<IMessageSender>(this, "ToggleMasterIsPresented", OnToggleMasterIsPresented); 並處理它。

    private void OnToggleMasterIsPresented(IMessageSender obj)
    {
        _masterDetailPage.IsPresented = !_masterDetailPage.IsPresented;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM