![](/img/trans.png)
[英]Using Navigation in MasterDetailPage with Autofac and Xamarin.Forms
[英]Xamarin.Forms MasterDetailPage dismiss MasterPageItem
我有一個 MasterDetailPage 和側邊欄菜單? 與 MasterPageItem。 現在我試圖關閉呈現的 MasterPageItem。 我該怎么做?
這是我的 MasterDetailPage:
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyApp;assembly=MyApp"
x:Class="MyApp.MainPage">
<MasterDetailPage.Master>
<local:MasterPage x:Name="masterPage" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage>
<x:Arguments>
<local:HomePage />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
</MasterDetailPage>
和 OnItemSelected 方法:
void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var item = e.SelectedItem as MasterPageItem;
if (item != null)
{
if(item.Title == "Logout")
{
SecureStorage.RemoveAll();
MessagingCenter.Send<Paindown.App>((Paindown.App)Xamarin.Forms.Application.Current, "UpdateMenu");
IsPresented = false;
}
else
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
masterPage.listView.SelectedItem = null;
IsPresented = false;
}
}
}
以下是我在 MasterPage 的側邊欄菜單中定義頁面的方式:
menu.Add(new MasterPageItem
{
Title = "Login",
TargetType = typeof(LoginPage)
});
我的問題來自LoginPage,我怎么go回到首頁?
您可以使用MessageCenter將消息從LoginPage發送到MenuPage ,然后可以使MenuPage將所選項目設置為HomePage 。
例如,從LoginPage發送消息:
void Button_Clicked(object sender, EventArgs e)
{
//MenuItemType.HomePage is a int value to represent the HomePage
MessagingCenter.Send<object, int>(this, "Home", (int)MenuItemType.HomePage);
}
然后在MenuPage中可以將當前頁面設置為HomePage :
public partial class MenuPage : ContentPage
{
public MenuPage()
{
...
//ListViewMenu is the name of ListView in Slider menu
//menuItems is the ViewModel which contains the HomePage
MessagingCenter.Subscribe<object,int>(this, "Home", (senders,arg) =>
{
ListViewMenu.SelectedItem = menuItems[arg];
});
...
}
}
=================================更新================ ================
如果想要動畫,您需要打開 slider 菜單並手動關閉它。
在此之前,我們可以創建一個public static Instance
( MasterDetailPage )。 然后我們可以在MenuPage中使用它來使用IsPresented
屬性。
主頁:
public partial class MainPage : MasterDetailPage
{
...
public static MainPage Instance { set; get; }
...
public MainPage()
{
...
Instance = this;
..
}
}
然后MenuPage會修改之前MessagingCenter.Subscribe
的方法如下:
...
MessagingCenter.Subscribe<object,int>(this, "Home",async (senders,arg) =>
{
// open slider menu
MainPage.Instance.IsPresented = true;
// set selected item
ListViewMenu.SelectedItem = menuItems[arg];
// wait 0.5 second
await Task.Delay(500);
//close slider menu
MainPage.Instance.IsPresented = false;
});
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.