如何在xamarin表单中禁用主详细信息页面中的左侧菜单?

时间:2016-07-14 05:32:55

标签: xamarin.forms

我有masterdetail页面,里面有左菜单。用户在masterdetail页面上工作正常。但是当用户从主详细信息页面移动到简单内容页面(不是主详细信息页面的一部分)时,如果他从左向左滑动菜单打开,则在此内容页面上。 如何在此内容页面上禁用左侧菜单?以及为什么左侧菜单显示在简单内容页面上,而它不是主详细信息页面的一部分?

6 个答案:

答案 0 :(得分:5)

如果您仍在寻找解决方案,可以这样做:

IsGestureEnabled = false;

您可以继续使用

await Navigation.PushAsync(new PageWhichWontOpenTheMenu());

要使用它,只需在OnAppearing方法上获取RootPage(MasterDetailPage),如下所示:

protected override void OnAppearing(){
        base.OnAppearing();
        (Application.Current.MainPage as RootPage).IsGestureEnabled = false;
}

告诉我它是否适合你,干杯!

答案 1 :(得分:1)

更好的是,您在SideMenu列表的<a ng-click="vm.showEditOpportunity(3122)" class="btn btn-sm"> <svg class="svg-inline--fa fa-pencil-alt fa-w-16" style="color: #4b286d;" data-toggle="tooltip" title="Edit this Opportunity" aria-labelledby="svg-inline--fa-title-381" data-prefix="fas" data-icon="pencil-alt" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""> <title id="svg-inline--fa-title-381">Edit this Opportunity</title> <path fill="currentColor" d="M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z </path> </svg> </a> 事件中可以执行的操作是检查要禁用SideMenu的类型,然后在导航到该页面时将IsGestureEnabled设置为false:

element(by.css('[ng-click="vm.showEditOpportunity(3122)"]')).click();
element(by.xpath("//a[contains(text(),'vm.showEditOpportunity(3122)')]")).click();
element(by.xpath("//svg[@title='Edit this Opportunity']")).click();

我知道这个答案很晚,但我希望将来可以帮助某人:)。

答案 2 :(得分:0)

您可能使用Detail.Navigation.PushAsync(...)而非使用Navigation.PushAsync(...)

答案 3 :(得分:0)

要真正禁用,我找到了一种方法,使用导航。PushModalAsync(...)。但是这样,你就不再有顶部的导航栏了。你可以自己建一个。

答案 4 :(得分:0)

有效的方法是使用 IsEnabled 属性禁用整个MasterDetailPage。

在可能的情况下,从选项菜单执行流程(不导航或更改详细信息页面),我需要阻止用户与页面的任何交互。

希望这有帮助。

问候

答案 5 :(得分:0)

您只能在“主要详细信息”页面上禁用手势。

可以通过通知当前页面不是母版页面来解决:

1)当我们通过

设置“主要详细信息”页面时
 Detail = new NavigationPage((Page)Activator.CreateInstance(page));
 IsGestureEnabled = true;// always set it true when setting a page to master page

2)使用MasterDetails页面中的MessagingCenter来通知当前页面不是母版页面:(在母版页面构造函数内部)

MessagingCenter.Subscribe<string>(this, "DisableGesture", (sender) =>
            {
                if(sender == "0")
                {
                    IsGestureEnabled = false;
                }
                else
                {
                    IsGestureEnabled = true;
                }
            });

3)当您从标准内容页面导航时,不想从此处打开主菜单时,请通知母版页面IsGestureEnabled = false;

//content page OnAppearing method
 protected override void OnAppearing()
        {
            MessagingCenter.Send<string>("0", "DisableGesture");
        }

对您不想打开主菜单的所有内容页面执行此操作。 ****并记住您将哪些页面设置为主页面,对于出现的那些页面,发送消息中心的值为“ 1”

 protected override void OnAppearing()
        {
            MessagingCenter.Send<string>("1", "DisableGesture");
        }

谢谢