0

我只能部分更改 AppBar 的背景颜色。

具体来说,AppBar 上的后退按钮段不会改变颜色。

在此处输入图像描述

内容页面.XAML

<Shell.TitleView>
    <Grid BackgroundColor="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto" />
            <ColumnDefinition Width="auto" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <Image Grid.Column="0" Source="icon.png" HorizontalOptions="Start" />
        
        <Label Grid.Column="1" Grid.ColumnSpan="2"
               Text="My Logo"
               FontSize="Large"
               HorizontalOptions="Start" 
               VerticalOptions="Center" />

        <Image Grid.Column="2" Source="Hambuger.png"  HorizontalOptions="End" Margin="0,0,15,0">
            <Image.GestureRecognizers>
                <TapGestureRecognizer Tapped="Hamburger_Tapped" />
            </Image.GestureRecognizers>
        </Image>
    </Grid>
</Shell.TitleView>

AppShell.XAML

<Shell.Resources>
    <ResourceDictionary>
        <Color x:Key="NavigationPrimary">White</Color>
        <Style x:Key="BaseStyle" TargetType="Element">
            <Setter Property="Shell.BackgroundColor" Value="White" />
            <Setter Property="Shell.ForegroundColor" Value="Black" />
            <Setter Property="Shell.TitleColor"      Value="#7f9c6a" />
            <Setter Property="Shell.DisabledColor"   Value="#B4FFFFFF" />
            <Setter Property="Shell.UnselectedColor" Value="#95FFFFFF" />
            <Setter Property="Shell.TabBarBackgroundColor" Value="White" />
            <Setter Property="Shell.TabBarForegroundColor" Value="White"/>
            <Setter Property="Shell.TabBarUnselectedColor" Value="#95FFFFFF"/>
            <Setter Property="Shell.TabBarTitleColor"      Value="Red"/>
        </Style>
        <Style TargetType="TabBar" BasedOn="{StaticResource BaseStyle}" />
    </ResourceDictionary>
</Shell.Resources>

我尝试了以下操作:

protected override void OnCreate(Bundle savedInstanceState)
{
    ...
    Window.SetNavigationBarColor(Android.Graphics.Color.White);
    ...
}
4

2 回答 2

0

参考:https ://forums.xamarin.com/discussion/comment/421573#Comment_421573

添加了自定义渲染器

[assembly: ExportRenderer(typeof(AppShell), typeof(ShellCustomRenderer))]
namespace HC.MyApp.Droid
{
    public class ShellCustomRenderer: ShellRenderer
    {
        public ShellCustomRenderer(Context context) : base(context) { }

        protected override IShellToolbarAppearanceTracker CreateToolbarAppearanceTracker()
        {
            return new ToolbarAppearance();
        }
    }

    public class ToolbarAppearance : IShellToolbarAppearanceTracker
    {
        public void Dispose() { }

        public void ResetAppearance(Android.Support.V7.Widget.Toolbar toolbar, IShellToolbarTracker toolbarTracker)
        {
            toolbar.SetBackgroundColor(Android.Graphics.Color.White);
        }

        public void SetAppearance(Android.Support.V7.Widget.Toolbar toolbar, IShellToolbarTracker toolbarTracker, ShellAppearance appearance)
        {
            toolbar.SetBackgroundColor(Android.Graphics.Color.White);
        }
    }
}
于 2020-09-16T12:02:28.480 回答
0

你用的是什么模板Shell?在设置样式时,我们需要指定TargetType来消费样式颜色。如果您使用FlyoutItem模板,请为其设置TargetType

检查代码:

<Shell.Resources>
    <ResourceDictionary>
        <Style x:Key="BaseStyle" TargetType="Element">
            <Setter Property="Shell.BackgroundColor" Value="White" />
            ...
        </Style>
        <Style TargetType="TabBar" BasedOn="{StaticResource BaseStyle}" />
        <Style TargetType="FlyoutItem" BasedOn="{StaticResource BaseStyle}" />
    </ResourceDictionary>
</Shell.Resources>

类似问题:
https ://forums.xamarin.com/discussion/162731/xamarin-forms-shell-navbar-background-and-text-color

于 2020-09-16T01:41:00.707 回答