2016-04-12 23 views
10

Şu anda MvvmCross kullanarak bir Xamarin Forms Android projesi üzerinde çalışıyorum. Çerçeveyle ilgili garip bir sorunum var. OutlineColor'u her ayarladığımda, yalnızca iOS'ta değil, Android'de görüntülenir. Farklı bir Xamarin Forms projesiyle çalıştım ve her iki platformda da sorunsuzca görüntüleniyor. Bunun neden olduğuna dair hiç bir endikasyon yok. MvvmCross bir şekilde konuyla ilgili olabilir mi?Çerçevenin Çerçeve rengi, MvvmCross kullanarak Xamarin Forms Android Projesi'nde görüntülenmiyor

<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, Sürüm Hatta ben aynı sorunu var 2.1 MvvmCross Sürüm 4.1

+0

XAML veya UI kodunuzun önemli parçalarını ve iOS ve Android ekranlarının bir görünümünü ekleyebilir misiniz? Bu yardımcı olabilir. –

+0

Benim tarafımdan aynı sorun! Bunun için herhangi bir iş var mı? – Suchith

cevap

8

Forms i var bu çözmek için: Burada

bir örnek Çerçeve kontrolü için özel oluşturucu eklendi. framerenderer olarak yöntem çizin ve özel yöntem DrawOutline aşağıdaki gibi

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); 
    } 
} 

Ve başka yaklaşımda da bir arka plan kaynak olarak yuvarlatılmış köşenin android seçici xml kullanarak düşünebiliriz geçersiz kılmak gerekir. Bu ekleyiniz hakkında daha fazla bilgi için blog gönderim yazıyorum: http://www.appliedcodelog.com/2016/11/xamarin-form-frame-outline-color_21.html

+0

2. seçenek alternatif bir alternatiftir? çerçeveden özel bir kontrol oluşturursunuz. Benim için çok net değil. – batmaci

+0

Çerçeve için özel bir denetim oluşturun ve koyu kenarlıklı arka plan kaynağı xml tanımlayın. – Suchith

+1

Blogda bahsedilen ikinci alternatif benim için çalıştı. –

İlgili konular