0

こんにちは、私はXamarin Developmentの新人です。現在PCLプロジェクトに取り組んでいます。 MasterDetailsPageのコンセプトを使用してナビゲーションドロワーの実装を行いました。それは正常に動作しています。 私が直面している問題は、MasterDetailsPageがBlue Colorのアクションバーとメニューアイコンを使ってナビゲーションドロワーを開閉することです。黒い色で上書きする必要があります。親切に何かを提案する。 私は現在使用しているコードを記述しました。 また、空白が表示され、私はそれを取り除きたいです。 UR1の下では、これを初めて覚えているので、各プラットフォームのCustomRendererを記述することはできません。 https://forums.xamarin.com/discussion/comment/244966/#Comment_244966Xamarin.FormsのMasterDetailPage Actiobarの背景色を変更するにはどのプラットフォームに反映されますか?

空白を削除し、ツールバーの色を変更するためのcustomrendererの書き方を教えてください。

コード:

私のXAMLファイル:

<?xml version="1.0" encoding="utf-8" ?> 
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:WYH_XAMARIN.MasterDetailPageNavigation" 
      x:Class="WYH_XAMARIN.MasterDetailPageNavigation.NavigationDrawerPage"> 

    <MasterDetailPage.Master> 
    <ContentPage Title="Menu" 
       BackgroundColor="#e8e8e8"> 

     <StackLayout Orientation="Vertical"> 

     <!-- 
      This StackLayout you can use for other 
      data that you want to have in your menu drawer 
     --> 
     <StackLayout BackgroundColor="#e74c3c" 
        HeightRequest="75"> 

      <Label Text="Some Text title" 
       FontSize="20" 
       VerticalOptions="CenterAndExpand" 
       TextColor="White" 
       HorizontalOptions="Center"/> 
     </StackLayout> 

     <ListView x:Name="navigationDrawerList" 
        RowHeight="60" 
        SeparatorVisibility="None" 
        BackgroundColor="#e8e8e8" 
        ItemSelected="OnMenuItemSelected"> 

      <ListView.ItemTemplate> 
      <DataTemplate> 
       <ViewCell> 

       <!-- Main design for our menu items --> 
       <StackLayout VerticalOptions="FillAndExpand" 
          Orientation="Horizontal" 
          Padding="20,10,0,10" 
          Spacing="20"> 

        <Image Source="{Binding Icon}" 
         WidthRequest="40" 
         HeightRequest="40" 
         VerticalOptions="Center" /> 

        <Label Text="{Binding Title}" 
         FontSize="Medium" 
         VerticalOptions="Center" 
         TextColor="Black"/> 
       </StackLayout> 
       </ViewCell> 
      </DataTemplate> 
      </ListView.ItemTemplate> 
     </ListView> 
     </StackLayout> 

    </ContentPage> 
    </MasterDetailPage.Master> 

    <MasterDetailPage.Detail> 

    <NavigationPage> 

    </NavigationPage> 
    </MasterDetailPage.Detail> 
</MasterDetailPage> 

と私のクラスファイルは次のとおりです。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using WYH_XAMARIN.PojoClasses; 
using Xamarin.Forms; 

namespace WYH_XAMARIN.MasterDetailPageNavigation 
{ 
    public partial class NavigationDrawerPage : MasterDetailPage 
    { 
     LoginSuccessfullResponse loginSuccessResponse; 
     public List<MasterPageItem> menuList { get; set; } 

     public NavigationDrawerPage() 
     { 

      InitializeComponent(); 

      NavigationPage.SetHasNavigationBar(this, false); 

      menuList = new List<MasterPageItem>(); 

      // Creating our pages for menu navigation 
      // Here you can define title for item, 
      // icon on the left side, and page that you want to open after selection 
      var page1 = new MasterPageItem() { Title = "My Profile", Icon = "icon.png", TargetType = typeof(TestPage1) }; 
      var page2 = new MasterPageItem() { Title = "Service Booking", Icon = "icon.png", TargetType = typeof(TestPage2) }; 
      var page3 = new MasterPageItem() { Title = "Item 3", Icon = "icon.png", TargetType = typeof(TestPage3) }; 

      // Adding menu items to menuList 
      menuList.Add(page1); 
      menuList.Add(page2); 
      menuList.Add(page3); 

      // Setting our list to be ItemSource for ListView in MainPage.xaml 
      navigationDrawerList.ItemsSource = menuList; 

      // Initial navigation, this can be used for our home page 
      Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(TestPage1))); 
     } 

     public NavigationDrawerPage(LoginSuccessfullResponse loginSuccessResponse) 
     { 
      this.loginSuccessResponse = loginSuccessResponse; 

      InitializeComponent(); 

      NavigationPage.SetHasNavigationBar(this, false); 

      menuList = new List<MasterPageItem>(); 

      // Creating our pages for menu navigation 
      // Here you can define title for item, 
      // icon on the left side, and page that you want to open after selection 
      var page1 = new MasterPageItem() { Title = "My Profile", Icon = "icon.png", TargetType = typeof(TestPage1) }; 
      var page2 = new MasterPageItem() { Title = "Service Booking", Icon = "icon.png", TargetType = typeof(TestPage2) }; 
      var page3 = new MasterPageItem() { Title = "Item 3", Icon = "icon.png", TargetType = typeof(TestPage3) }; 

      // Adding menu items to menuList 
      menuList.Add(page1); 
      menuList.Add(page2); 
      menuList.Add(page3); 

      // Setting our list to be ItemSource for ListView in MainPage.xaml 
      navigationDrawerList.ItemsSource = menuList; 

      // Initial navigation, this can be used for our home page 
      Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(TestPage1))); 
     } 

     // Event for Menu Item selection, here we are going to handle navigation based 
     // on user selection in menu ListView 
     private void OnMenuItemSelected(object sender, SelectedItemChangedEventArgs e) 
     { 

      var item = (MasterPageItem)e.SelectedItem; 
      Type page = item.TargetType; 

      Detail = new NavigationPage((Page)Activator.CreateInstance(page)); 
      IsPresented = false; 
     } 
    } 
} 

Guysはこれを解決するために私を助けてください。 サンプルコードまたは作業チュートリアルが役立ちます。 ありがとうございます!

答えて

0

しかし、私が直面している問題は、MasterDetailsPageには、ナビゲーション・ドロワーを開く/閉じるためのブルー・カラー・アクションバーとメニュー・アイコンが付属しているということです。

あなたは

私はあなたの問題を再現しませんでした登場

Detail = new NavigationPage((Page)Activator.CreateInstance(typeof(MainPage))) { BarBackgroundColor = Color.Red };

空白がある使用しよう ActionBar色を変更するには、レンダリングの顧客をする必要はありません、私のマスターの詳細ページは書き込み行なしで正常に動作します。 my projectを参照できます。

あなたが提供するリンクの回答を確認してください。私は、顧客がAndroidのプロジェクトでMarstDetialPageのレンダリング作成しました:

[assembly: ExportRenderer(typeof(MasterDetailPage), typeof(CustomMasterDetailRenderer))] 
namespace MasterDetialPage_MyTest.Droid 
{ 
    public class CustomMasterDetailRenderer : MasterDetailPageRenderer 
    { 
     public override void AddView(Android.Views.View child) 
     { 
      child.GetType().GetRuntimeProperty("TopPadding").SetValue(child, 0); 
      var padding = child.GetType().GetRuntimeProperty("TopPadding").GetValue(child); 

      base.AddView(child); 
     } 
    } 
} 

それは、通知バーなしに画面を取得します。

注:私はAndroidプラットフォーム上で

enter image description hereenter image description here

を、それをテストしています
関連する問題