2017-05-31 16 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が提供する、とのdoesnれますマスターディテールで定義されているアイコンを気にしないでくださいiOS/UWPで編集しました。

私はそのような数を助けることができなかったけれども、それはおそらくオーバーライドすることができます。

色を変更した後で、タイトルバーのアンドロイドテーマのテキストの色を変更すると、ハンバーガーの色も変わってしまいます。

+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

こんにちは、これは素晴らしい作品です。しかし、私はこのアプローチの小さな問題に気づいた。上記のようにハンバーガーメニューを変更すると、戻る矢印もハンバーガーアイコンに変わります。私はループの中で、ツールバーの項目がハンバーガーのイメージであるかどうかを特定し、それを変更する方法があるはずです。それ以外の場合は無視する必要があります。私はこれを解決することができません。何か案が。ありがとう。 –

関連する問題