2016-04-12 20 views
10

Hiện tại tôi đang làm việc trên dự án Xamarin Forms Android bằng MvvmCross. Tôi có một vấn đề lạ về Frame. Bất cứ khi nào tôi đặt OutlineColor, nó chỉ được hiển thị trong iOS chứ không phải trong Android. Tôi đã thử với một dự án Xamarin Forms khác nhau và nó được hiển thị bởi cả hai nền tảng mà không có bất kỳ vấn đề gì. Tôi không có bất kỳ dấu hiệu nào tại sao điều này xảy ra. Có thể MvvmCross bằng cách nào đó liên quan đến vấn đề này?Màu đường viền của Khung hình không được hiển thị trong Dự án Android của Xamarin Forms bằng MvvmCross

Đây là một mẫu:

<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 Version 2.1 MvvmCross Version 4.1

+0

Bạn có thể thêm các phần quan trọng của mã XAML hoặc giao diện người dùng và ảnh chụp màn hình của iOS và Android không? Điều này có thể giúp. –

+0

Cùng một vấn đề từ phía tôi! bất kỳ công việc xung quanh cho điều này? – Suchith

Trả lời

8

Thậm chí tôi đã nhận cùng một vấn đề, để giải quyết việc này tôi có đã thêm trình kết xuất tùy chỉnh cho điều khiển Khung. Trong framerenderer cần phải ghi đè phương pháp vẽ và phương pháp DrawOutline tin như sau,

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

Và trong cách tiếp cận khác, bạn cũng có thể xem xét sử dụng xml selector android của góc tròn như một nguồn lực nền. Để biết thêm chi tiết về kiểm tra này, bài đăng trên blog của tôi: http://www.appliedcodelog.com/2016/11/xamarin-form-frame-outline-color_21.html

+0

Tùy chọn thứ 2 là quyền thay thế? bạn tạo một điều khiển tùy chỉnh trong khung. Nó không phải là rất rõ ràng đối với tôi. – batmaci

+0

Tạo một điều khiển tùy chỉnh cho khung và xác định tài nguyên nền xml với đường viền tối hơn. – Suchith

+1

Cách thay thế thứ hai được đề cập trong blog làm việc cho tôi. –

Các vấn đề liên quan