C# 如何更改导航栏的颜色?
使用Xamarin表单Pcl和Prism库 内置APP.CSC# 如何更改导航栏的颜色?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,使用Xamarin表单Pcl和Prism库 内置APP.CS protected override void OnInitialized() { //Initialize(); InitializeComponent(); NavigationService.NavigateAsync("NavigationPage/MainPage"); } protected override void RegisterTypes() { Container.Register
protected override void OnInitialized()
{
//Initialize();
InitializeComponent();
NavigationService.NavigateAsync("NavigationPage/MainPage");
}
protected override void RegisterTypes()
{
Container.RegisterTypeForNavigation<NavigationPage>();
Container.RegisterTypeForNavigation<MainPage,MainPageViewModel>
("MainPage");
}
但是它永远不会改变导航栏的颜色。我建议在Xamarin上打开一个问题。在没有Prism的Xamarin Forms应用程序中,这实际上不起作用。如果您在应用程序中使用单一样式,则只需将以下样式添加到app.xaml
<Application.Resources>
<!-- Application resource dictionary -->
<ResourceDictionary>
<Style TargetType="NavigationPage">
<Setter Property="HasNavigationBar" Value="True" />
<Setter Property="BarTextColor" Value="Black" />
<Setter Property="BarBackgroundColor" Value="Red" />
</Style>
</ResourceDictionary>
</Application.Resources>
否则,我可能建议实现一个名为
INavigatingAware
的NavigationPage,并使用NavigationParameters帮助它确定需要使用的样式 我创建了自己的导航页面
public class CustomNav : NavigationPage
{
public CustomNav()
{
//here you can set all you styles
}
}
注册时
Container.RegisterTypeForNavigation<CustomNav>("NavigationPage");
Container.RegisterTypeForNavigation(“NavigationPage”);
因此,当我使用Prism时,我可以引用它NavigationPage,请遵循以下链接:其中“注册”部分中的T是您的自定义NavigationPage(在下面的示例中
AppInfoNavPage
),您可以在其中像这样设置构造函数中的各种属性
public partial class AppInfoNavPage : NavigationPage
{
public AppInfoNavPage()
{
InitializeComponent();
BarBackgroundColor = App.Data.DarkBlue;
BarTextColor = Color.White;
}
}
这实际上与棱镜无关。供参考:可以找到Xamarin的相关部分。iOS的表格2.3.4。因此,这实际上应该是可行的,尽管它不可行。但已更改为。我将颜色从style.xml更改为。如果您使用的是PrismApplication,则需要进行一次更改。这没有错,但仅当您的应用程序中需要多个导航页面,每个页面都需要不同的样式时才应使用。在应用程序资源中设置全局样式要好得多。
public partial class AppInfoNavPage : NavigationPage
{
public AppInfoNavPage()
{
InitializeComponent();
BarBackgroundColor = App.Data.DarkBlue;
BarTextColor = Color.White;
}
}