2017-05-31 49 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

嗨,這很好。但是,我注意到這種方法存在一個小問題。如果我像上面那樣更改漢堡包菜單,後退箭頭也會變成漢堡包圖標。我想,在循環中,應該有一種方法來確定工具欄項是否是漢堡包圖像,然後才能更改它,否則應該忽略它。我無法解決這個問題。任何想法。謝謝。 –

相關問題