Цвет рамки кадра не отображается в Xamarin Forms Android Project с использованием MvvmCross

В настоящее время я работаю над проектом Android Xamarin Forms с использованием MvvmCross. У меня странная проблема с Frame. Всякий раз, когда я устанавливаю OutlineColor, он отображается только в iOS, а не в Android. Я пробовал с другими проектами Xamarin Forms, и он отображается на обеих платформах без каких-либо проблем. У меня нет никаких указаний, почему это происходит. Может ли MvvmCross каким-то образом связать эту проблему?

Вот пример:

  <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

iOS page

Xamarin Forms Версия 2.1 Версия MvvmCross 4.1

Ответ 1

Даже у меня такая же проблема, для решения этой проблемы я добавил пользовательский рендеринг для управления рамкой. В framerenderer необходимо переопределить метод Draw и частный метод DrawOutline следующим образом:

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

И в другом подходе вы также можете рассмотреть использование андроида селектора xml закругленного угла в качестве фонового ресурса. Для получения дополнительной информации об этом проверьте мое сообщение в блоге: http://www.appliedcodelog.com/2016/11/xamarin-form-frame-outline-color_21.html