在 xamarin 表单 droid 项目中的导航栏上显示母版页
display master page over navigation bar in xamarin forms droid project
对于那些曾经在Java中为Android编写代码的人,我相信您会立即理解这个概念,而其他人可能不会,但是没关系,我会尽力而为尝试解释我的意思。
我有这个项目,公司一,在工作中交付,我必须开发一个应用程序,除其他外,包含导航抽屉概念形式 material 设计,但适应公司的adm 最喜欢 "concept" 的开发,即 Xamarin(在本例中为 Forms)......可以说他们还不理解它背后的概念(很可能是儿童游戏应用程序)并且需要一个 B2C 应用程序,非常专业,用 THAT 开发... -_-
无论如何,在我设法找到并不得不面对的大量其他问题中,有一个是:导航抽屉(a.k.a。这里是母版页)需要显示在 AppCompatBar(这里导航栏),因为,好吧,因为这就是使用 Android 时应该感受到的,这就是它与其他所有应用程序的工作方式,这就是它设计的工作方式,以及它必须如何工作,但猜猜是什么?没有进入 Xamarin Forms...
我已经尝试了 https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/,网络上的几个博客和论坛(当然,除了他们的,因为 3 个月后我还在等待一个非常简单的答案,并且该项目必须很快作为演示呈现),他们的书“创造
Xamarin.Forms 的移动应用程序”,Charles Petzold,在线视频,什么都没有,没有关于如何在调用时在导航栏上显示母版页的线索...
这是xaml中主页的代码:
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Mobile.UI.Pages;assembly=Mobile"
x:Class="Mobile.UI.Pages.MainPage"
BackgroundColor="White"
IsGestureEnabled="False"
MasterBehavior="Default">
<MasterDetailPage.Master>
<local:MasterPage x:Name="masterPage" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage
BarBackgroundColor="#27C6E5">
<x:Arguments>
<local:ItemListPage />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
母版页也在xaml:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Mobile.UI.Pages.MasterPage"
Icon="menu.png"
Title="Menu">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness"
iOS="0, 20, 0, 0" />
</ContentPage.Padding>
<StackLayout
VerticalOptions="FillAndExpand">
<StackLayout
VerticalOptions="Fill"
HorizontalOptions="Fill"
HeightRequest="128"
Orientation="Vertical"
BackgroundColor="White"
Padding="4">
<Image
Source="favicon.png"
HeightRequest="128"
WidthRequest="200"
VerticalOptions="Center"
HorizontalOptions="Center" />
</StackLayout>
<ListView
x:Name="menuList"
VerticalOptions="FillAndExpand"
SeparatorVisibility="None"
HasUnevenRows="False">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell
ImageSource="{Binding IconSource}"
Text="{Binding Title}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
它的代码隐藏:
public ListView ListView
{
get
{
return menuList;
}
}
public MasterPage()
{
InitializeComponent();
Padding = 0;
var menuListItems = new List<MenuListItem>();
menuListItems.Add(new MenuListItem()
{
Title = "Items",
IconSource = "items.png",
TargetType = typeof(ItemListPage)
});
menuListItems.Add(new MenuListItem()
{
Title = "Chat",
IconSource = "chat.png",
TargetType = typeof(ChatListPage)
});
menuList.ItemsSource = menuListItems;
}
还有我的主页:
public partial class MainPage : MasterDetailPage
{
public MainPage()
{
InitializeComponent();
masterPage.ListView.ItemTapped += ListView_ItemTapped;
if (Device.OS == TargetPlatform.WinPhone)
{
Master.Icon = "menu.png";
}
}
private void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
var item = e.Item as MenuListItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType))
{
BarBackgroundColor = Color.FromRgb(204, 204, 204),
Title = item.Title
};
masterPage.ListView.SelectedItem = null;
IsPresented = false;
}
}
}
您还需要什么,请尽管问...
有什么帮助吗?
提前致谢...
对我来说,关键是要确保 Android activity 继承自 FormsAppCompatActivity。
This 博客 post 让我们走上正轨。
对于那些曾经在Java中为Android编写代码的人,我相信您会立即理解这个概念,而其他人可能不会,但是没关系,我会尽力而为尝试解释我的意思。
我有这个项目,公司一,在工作中交付,我必须开发一个应用程序,除其他外,包含导航抽屉概念形式 material 设计,但适应公司的adm 最喜欢 "concept" 的开发,即 Xamarin(在本例中为 Forms)......可以说他们还不理解它背后的概念(很可能是儿童游戏应用程序)并且需要一个 B2C 应用程序,非常专业,用 THAT 开发... -_-
无论如何,在我设法找到并不得不面对的大量其他问题中,有一个是:导航抽屉(a.k.a。这里是母版页)需要显示在 AppCompatBar(这里导航栏),因为,好吧,因为这就是使用 Android 时应该感受到的,这就是它与其他所有应用程序的工作方式,这就是它设计的工作方式,以及它必须如何工作,但猜猜是什么?没有进入 Xamarin Forms...
我已经尝试了 https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/,网络上的几个博客和论坛(当然,除了他们的,因为 3 个月后我还在等待一个非常简单的答案,并且该项目必须很快作为演示呈现),他们的书“创造 Xamarin.Forms 的移动应用程序”,Charles Petzold,在线视频,什么都没有,没有关于如何在调用时在导航栏上显示母版页的线索...
这是xaml中主页的代码:
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Mobile.UI.Pages;assembly=Mobile"
x:Class="Mobile.UI.Pages.MainPage"
BackgroundColor="White"
IsGestureEnabled="False"
MasterBehavior="Default">
<MasterDetailPage.Master>
<local:MasterPage x:Name="masterPage" />
</MasterDetailPage.Master>
<MasterDetailPage.Detail>
<NavigationPage
BarBackgroundColor="#27C6E5">
<x:Arguments>
<local:ItemListPage />
</x:Arguments>
</NavigationPage>
</MasterDetailPage.Detail>
母版页也在xaml:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Mobile.UI.Pages.MasterPage"
Icon="menu.png"
Title="Menu">
<ContentPage.Padding>
<OnPlatform x:TypeArguments="Thickness"
iOS="0, 20, 0, 0" />
</ContentPage.Padding>
<StackLayout
VerticalOptions="FillAndExpand">
<StackLayout
VerticalOptions="Fill"
HorizontalOptions="Fill"
HeightRequest="128"
Orientation="Vertical"
BackgroundColor="White"
Padding="4">
<Image
Source="favicon.png"
HeightRequest="128"
WidthRequest="200"
VerticalOptions="Center"
HorizontalOptions="Center" />
</StackLayout>
<ListView
x:Name="menuList"
VerticalOptions="FillAndExpand"
SeparatorVisibility="None"
HasUnevenRows="False">
<ListView.ItemTemplate>
<DataTemplate>
<ImageCell
ImageSource="{Binding IconSource}"
Text="{Binding Title}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
它的代码隐藏:
public ListView ListView
{
get
{
return menuList;
}
}
public MasterPage()
{
InitializeComponent();
Padding = 0;
var menuListItems = new List<MenuListItem>();
menuListItems.Add(new MenuListItem()
{
Title = "Items",
IconSource = "items.png",
TargetType = typeof(ItemListPage)
});
menuListItems.Add(new MenuListItem()
{
Title = "Chat",
IconSource = "chat.png",
TargetType = typeof(ChatListPage)
});
menuList.ItemsSource = menuListItems;
}
还有我的主页:
public partial class MainPage : MasterDetailPage
{
public MainPage()
{
InitializeComponent();
masterPage.ListView.ItemTapped += ListView_ItemTapped;
if (Device.OS == TargetPlatform.WinPhone)
{
Master.Icon = "menu.png";
}
}
private void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
{
var item = e.Item as MenuListItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType))
{
BarBackgroundColor = Color.FromRgb(204, 204, 204),
Title = item.Title
};
masterPage.ListView.SelectedItem = null;
IsPresented = false;
}
}
}
您还需要什么,请尽管问...
有什么帮助吗?
提前致谢...
对我来说,关键是要确保 Android activity 继承自 FormsAppCompatActivity。
This 博客 post 让我们走上正轨。