代码之家  ›  专栏  ›  技术社区  ›  Scott Nimrod

无法更改AppBar上的颜色

  •  0
  • Scott Nimrod  · 技术社区  · 4 年前

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

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

    enter image description here

    内容页.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);
        ...
    }
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Jarvan Zhang - MSFT    4 年前

    你用了什么样的模板 Shell ? 在设置样式时,我们需要指定 使用样式颜色。如果你使用 模板,请设置 目标类型

    检查代码:

    <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

        2
  •  0
  •   Scott Nimrod    4 年前

    参考文献: 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);
            }
        }
    }