Как связать привязываемый объект с xml-файлом в формах xamarin - PullRequest
0 голосов
/ 28 марта 2019

Я создал пользовательский макет стека для Android с помощью пользовательского рендерера.Граница StackLayout создается с использованием файла XML.Цвет границы определяется в этом XML-файле.Но я хочу динамически изменять цвет этой границы во время выполнения, используя свойство связываемого объекта.Я сделал это с IOS.Но я понятия не имею, как связать привязываемый объект с XML-файлом.Пример моего кода customBorderStacklayout приведен ниже. Пожалуйста, поделитесь своим ценным предложением сделать это.

CustomStackBorder.cs

public class CustomStackBorder : StackLayout
{
    public Color BorderColor
    {
        get { return (Color)GetValue(BorderColorProperty); }
        set { SetValue(BorderColorProperty, value); }
    }

    public static readonly BindableProperty BorderColorProperty =
            BindableProperty.Create("BorderColor", typeof(Color), typeof(CustomStackBorder), Color.Gray, BindingMode.TwoWay);

    public CustomStackBorder()
    {       
    }
}

CustomStackLayoutRenderer.cs (Android)

public class CustomStackLayoutRenderer : VisualElementRenderer<StackLayout>
{
      public CustomStackLayoutRenderer(Context context) : base(context)
      {
      }
      protected override void OnElementChanged(ElementChangedEventArgs<StackLayout> e)
      {
           base.OnElementChanged(e);
           Background = ContextCompat.GetDrawable(this.Context, Resource.Drawable.StackLayoutBorder);            
      }
}

StackLayoutBorder.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <stroke android:width="0.1dp" android:color="#ff555555"></stroke>
  <corners android:topLeftRadius="2dp"
            android:topRightRadius="2dp"
            android:bottomLeftRadius="2dp"
            android:bottomRightRadius="2dp" />
<solid android:color="#ffffff"/>
</shape>

1 Ответ

1 голос
/ 28 марта 2019

Вы можете сделать это, установив цвет обводки отрисовки.

Код:

protected override void OnElementChanged(ElementChangedEventArgs<StackLayout> e)
    {
        base.OnElementChanged(e);

        if (e.NewElement != null)
        {
            if (e.NewElement as CustomStackBorder != null)
            {
                Background = ContextCompat.GetDrawable(this.Context, Resource.Drawable.StackLayoutBorder);
                GradientDrawable bgShape = (GradientDrawable)this.Background;
                bgShape.SetStroke(1, (e.NewElement as CustomStackBorder).BorderColor.ToAndroid());

            }
        }
    }

Измените ваш метод OnElementChanged в пользовательском рендере стекового представления на мой код и замените значение BorderColor на реальные данные. Это все, что вам нужно сделать.

Счастливого кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...