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