2016-04-12 23 views
10

Attualmente sto lavorando a un progetto Android Xamarin Forms utilizzando MvvmCross. Ho uno strano problema riguardante il Frame. Ogni volta che si imposta OutlineColor, viene visualizzato solo in iOS e non in Android. Ho provato con un diverso progetto Xamarin Forms e viene visualizzato da entrambe le piattaforme senza problemi. Non ho alcuna indicazione sul perché ciò stia accadendo. Potrebbe MvvmCross in qualche modo correlato al problema?Il colore del profilo della cornice non viene visualizzato nel progetto Android Form Xamarin utilizzando MvvmCross

Ecco un esempio:

<core:BasePage 
     xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:core="clr-namespace:Core.Base.Views;assembly=Core" 
     x:Class="Views.TestPage" 
     BackgroundImage="background_secret.png" 
     Title="Test"> 

     <ContentPage.Content> 
      <Grid 
       HorizontalOptions="FillAndExpand" 
       Padding="12,20,12,20" 
       VerticalOptions="FillAndExpand"> 
       <Frame 
        HasShadow="false" 
        VerticalOptions="Fill" 
        BackgroundColor="White" 
        OutlineColor="#1961ac"> 
        <StackLayout> 
         <Frame 
           VerticalOptions="Start" 
           Padding="8,4,8,4" 
           HasShadow="false" 
           OutlineColor="#9DB0BB"> 
           <Label Text="Test"></Label> 
          </Frame> 
        </StackLayout> 
     </Frame> 
      </Grid> 
     </ContentPage.Content> 
    </core:BasePage> 

Android page

iOS page

Xamarin Forms Versione 2.1 MvvmCross versione 4.1

+0

Potresti aggiungere i pezzi importanti del tuo codice XAML o UI e uno screenshot di iOS e Android? Questo potrebbe aiutare. –

+0

Lo stesso problema da parte mia! Qualche soluzione per questo? – Suchith

risposta

8

Anche ho avuto lo stesso problema, per risolvere questo ho aggiunto un renderizzatore personalizzato per il controllo Frame. In framerenderer necessità di sovrascrivere il metodo Draw e metodo DrawOutline privato come segue,

public override void Draw(ACanvas canvas) 
{ 
    base.Draw(canvas); 
    DrawOutline(canvas, canvas.Width, canvas.Height, 4f);//set corner radius 
} 
void DrawOutline(ACanvas canvas, int width, int height, float cornerRadius) 
{ 
    using (var paint = new Paint { AntiAlias = true }) 
    using (var path = new Path()) 
    using (Path.Direction direction = Path.Direction.Cw) 
    using (Paint.Style style = Paint.Style.Stroke) 
    using (var rect = new RectF(0, 0, width, height)) 
    { 
     float rx = Forms.Context.ToPixels(cornerRadius); 
     float ry = Forms.Context.ToPixels(cornerRadius); 
     path.AddRoundRect(rect, rx, ry, direction); 

     paint.StrokeWidth = 2f; //set outline stroke 
     paint.SetStyle(style); 
     paint.Color = Color.ParseColor("#A7AE22");//set outline color //_frame.OutlineColor.ToAndroid(); 
     canvas.DrawPath(path, paint); 
    } 
} 

E in un altro approccio si può anche considerare l'utilizzo del selettore xml Android di angolo arrotondato come risorsa sfondo. Per ulteriori dettagli su questo controllo il mio post del blog: http://www.appliedcodelog.com/2016/11/xamarin-form-frame-outline-color_21.html

+0

La seconda opzione è un'alternativa, giusto? si crea un controllo personalizzato fuori dal frame. Non è molto chiaro per me. – batmaci

+0

Creare un controllo personalizzato per il frame e definire xml risorsa di sfondo con bordo più scuro. – Suchith

+1

La seconda alternativa menzionata nel blog ha funzionato per me. –