2017-05-31 47 views
1

我拼命尝试更改Xamarin Forms应用程序的图标颜色。我认为这个汉堡菜单是文字,但现在我似乎无法改变它。这是一个图像吗?我找到了slideout.png图片,但是没有在应用中显示任何修改。它从哪里拉这个汉堡包菜单图标? enter image description here更改导航页面上的菜单栏图标

页:

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class LandingPage : MasterDetailPage 
{ 
    public LandingPage() 
    { 
     InitializeComponent(); 
     MasterPage.ListView.ItemSelected += ListView_ItemSelected; 
    } 
    public void ListView_ItemSelected(object sender, SelectedItemChangedEventArgs e) 
    { 
     var item = e.SelectedItem as LandingPageMenuItem; 
     if (item == null) 
      return; 
     var page = (Page)Activator.CreateInstance(item.TargetType); 
     page.Title = item.Title; 
     Detail = new NavigationPage(page); 
     MasterPage.ListView.SelectedItem = null; 
     IsPresented = false; 
    } 
} 

<?xml version="1.0" encoding="utf-8" ?> 
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     x:Class="Test.LandingPage" xmlns:pages="clr-namespace:Test"> 
    <MasterDetailPage.Master> 
     <pages:LandingPageMaster x:Name="MasterPage" /> 
    </MasterDetailPage.Master> 
    <MasterDetailPage.Detail> 
     <NavigationPage> 
      <x:Arguments> 
       <pages:LandingPageDetail /> 
      </x:Arguments> 
     </NavigationPage> 
    </MasterDetailPage.Detail> 
</MasterDetailPage> 

站长:

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class LandingPageMaster : ContentPage 
{ 
    public LandingPageMasterViewModel Vm { get; private set; } 
    public ListView ListView => ListViewMenuItems; 
    public LandingPageMaster() 
    { 
     InitializeComponent(); 
     Vm = new LandingPageMasterViewModel(); 
     BindingContext = Vm; 
    } 

    protected override void OnAppearing() 
    { 
     ListViewMenuItems.SelectedItem = Vm.MenuItems[0]; 
    } 
    public class LandingPageMasterViewModel : INotifyPropertyChanged 
    { 
     private ObservableCollection<LandingPageMenuItem> _menuItems; 

     public ObservableCollection<LandingPageMenuItem> MenuItems 
     { 
      get 
      { 
       return _menuItems; 
      } 
      set 
      { 
       _menuItems = value; 
       OnPropertyChanged(); 
      } 
     } 

     public LandingPageMasterViewModel() 
     { 
      ObservableCollection<LandingPageMenuItem> items = new ObservableCollection<LandingPageMenuItem>(); 
      items.Add(new LandingPageMenuItem { Title = "OCR" }); 
      MenuItems = items; 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     void OnPropertyChanged([CallerMemberName]string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="Test.LandingPageMaster" Title=""> 
    <StackLayout> 
     <ListView x:Name="ListViewMenuItems" SeparatorVisibility="None" HasUnevenRows="True" ItemsSource="{Binding MenuItems}"> 
      <ListView.Header> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="60" /> 
        </Grid.ColumnDefinitions> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="30" /> 
        </Grid.RowDefinitions> 
        <Label Grid.Column = "0" Grid.Row="0" Text=" " /> 
       </Grid> 
      </ListView.Header> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <ViewCell> 
         <StackLayout Padding="15,10" HorizontalOptions="FillAndExpand"> 
          <Label VerticalOptions="FillAndExpand" VerticalTextAlignment="Center" Text="{Binding Title}" FontSize="Medium" /> 
          <Label VerticalOptions="FillAndExpand" VerticalTextAlignment="Center" Text="{Binding Subtitle}" FontSize="Small" /> 
         </StackLayout> 
        </ViewCell> 
       </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
    </StackLayout> 
</ContentPage> 

详情:

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class LandingPageDetail : ContentPage 
{ 
    public LandingPageDetail() 
    { 
     InitializeComponent(); 
    } 
} 


<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="Test.LandingPageDetail" Title="Detail"> 
    <StackLayout Padding="10"> 
     <Label Text="This is a detail page" /> 
    </StackLayout> 
</ContentPage> 

回答

0

在Android汉堡包图形,和伴随的动画是由机器人OS提供,并没有按不关心主细节中定义的图标,虽然这个图标会帮助我们编辑在iOS/UWP上。

它可能会重写,虽然我没有必要这样不能帮助计数。

如果您只是在更改颜色后才更改标题栏的Android主题文本颜色,并且会根据我的理解更改汉堡包的颜色。

+0

谢谢您的回答。你能解释我将如何完成使用Android styles.xml改变颜色吗? – Kyle

1

这是Android平台上的ImageButton。所以你可以改变这个汉堡按钮的图像源。

您可以创建自定义MasterDetailPage使用Custom Renderers,例如,在渲染:

public class MyMasterDetailRenderer : MasterDetailPageRenderer 
{ 
    protected override void OnLayout(bool changed, int l, int t, int r, int b) 
    { 
     base.OnLayout(changed, l, t, r, b); 
     var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); 
     for (var i = 0; i < toolbar.ChildCount; i++) 
     { 
      var imageButton = toolbar.GetChildAt(i) as ImageButton; 

      var drawerArrow = imageButton?.Drawable as DrawerArrowDrawable; 
      if (drawerArrow == null) 
       continue; 

      imageButton.SetImageDrawable(Forms.Context.GetDrawable(Resource.Drawable.hamburger)); 
     } 
    } 
} 
+0

嗨,这很好。但是,我注意到这种方法存在一个小问题。如果我像上面那样更改汉堡包菜单,后退箭头也会变成汉堡包图标。我想,在循环中,应该有一种方法来确定工具栏项是否是汉堡包图像,然后才能更改它,否则应该忽略它。我无法解决这个问题。任何想法。谢谢。 –

相关问题