Подтвердить что ты не робот

Цвет рамки для редактора в Xamarin.Forms

Как я могу сделать цвет рамки для редактора в Xamarin.Forms?

Я использовал эту ссылку но она работает только для Android. Я хочу, чтобы он работал на всех платформах!

Я немного новичок в этом. Пожалуйста, помогите мне.

Любая идея?

4b9b3361

Ответ 1

Вы также можете архивировать это, обернув редактор с помощью StackLayout с помощью BackgroundColor="your color" и Padding="1" и установите BackgroundColor вашего редактора в тот же цвет формы.

Что-то вроде этого:

<StackLayout BackgroundColor="White">
      <StackLayout BackgroundColor="Black" Padding="1">
          <Editor BackgroundColor="White" />
      </StackLayout>
  ...
</StackLayout>

Не то, что вам нравится, но это, по крайней мере, даст вам границу!

Ответ 2

Вот полное решение, которое я использовал. Вам нужно три вещи.

1 - Пользовательский класс, реализующий Editor в вашем проекте форм.

public class BorderedEditor : Editor
{

}

2 - Пользовательский рендерер для вашего пользовательского Editor в вашем проекте iOS.

public class BorderedEditorRenderer : EditorRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            Control.Layer.CornerRadius = 3;
            Control.Layer.BorderColor = Color.FromHex("F0F0F0").ToCGColor();
            Control.Layer.BorderWidth = 2;
        }
    }
}

3 - Атрибут ExportRenderer в вашем проекте iOS, который сообщает Xamarin использовать свой собственный рендерер для вашего настраиваемого редактора.

[assembly: ExportRenderer(typeof(BorderedEditor), typeof(BorderedEditorRenderer))]

Затем используйте свой собственный редактор в Xaml:

<custom:BorderedEditor Text="{Binding TextValue}"/>

Ответ 3

в вашем переносном проекте добавьте этот элемент управления

 public class PlaceholderEditor : Editor
{
    public static readonly BindableProperty PlaceholderProperty =
        BindableProperty.Create("Placeholder", typeof(string), typeof(string), "");

    public PlaceholderEditor()
    {
    }

    public string Placeholder
    {
        get
        {
            return (string)GetValue(PlaceholderProperty);
        }

        set
        {
            SetValue(PlaceholderProperty, value);
        }
    }       
}

в вашем проекте Android добавить этот рендерер:

[assembly: ExportRenderer(typeof(PlaceholderEditor), typeof(PlaceholderEditorRenderer))]
namespace Tevel.Mobile.Packages.Droid
{


public class PlaceholderEditorRenderer : EditorRenderer
{ 

public PlaceholderEditorRenderer() {  }

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

        if (e.NewElement != null)
        {
            var element = e.NewElement as PlaceholderEditor;

            this.Control.Background = Resources.GetDrawable(Resource.Drawable.borderEditText);

            this.Control.Hint = element.Placeholder;
        }
    }

    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);

        if (e.PropertyName == PlaceholderEditor.PlaceholderProperty.PropertyName)
        {
            var element = this.Element as PlaceholderEditor;
            this.Control.Hint = element.Placeholder;
        }
    }
}
}

в ваших ресурсах > drawable добавить файл XML borderEditText.xml

 <?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true">
<shape android:shape="rectangle">
  <gradient
      android:startColor="#FFFFFF"
      android:endColor="#FFFFFF"
      android:angle="270" />
  <stroke
      android:width="3dp"
      android:color="#F8B334" />
  <corners android:radius="12dp" />
</shape>
  </item>
  <item>
<shape android:shape="rectangle">
  <gradient android:startColor="#FFFFFF" android:endColor="#FFFFFF"  android:angle="270" />
  <stroke android:width="3dp" android:color="#ccc" />
  <corners android:radius="12dp" />
</shape>
  </item>
</selector>

Xaml: Заголовок - xmlns:ctrls="clr-namespace:my control namespace;assembly= my assembly" Контроль:

<ctrls:PlaceholderEditor VerticalOptions="Fill" HorizontalOptions="StartAndExpand" Placeholder="add my comment title">
        </ctrls:PlaceholderEditor>

Ответ 4

Для каждой платформы вам потребуется реализовать Custom Renderer (руководство от Xamarin), поскольку настройка BorderColor Entry еще не поддерживается в Xamarin.Forms.

Поскольку вам уже удалось изменить BorderColor на Android, вы можете найти решение для iOS здесь: http://forums.xamarin.com/discussion/comment/102557/#Comment_102557

Ответ 5

Это работает точно, попробуйте это.

Android Renderer

using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Android.Graphics;

    [assembly: ExportRenderer(typeof(Entry), typeof(some.namespace.EntryRenderer))]
    namespace some.namespace
    {
        public class EntryRenderer : Xamarin.Forms.Platform.Android.EntryRenderer
        {
            protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
            {
                base.OnElementChanged(e);
                if (Control == null || Element == null || e.OldElement != null) return;

                var customColor = Xamarin.Forms.Color.FromHex("#0F9D58");
                Control.Background.SetColorFilter(customColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
            }
        }
    }

Ответ 6

простой способ для рендеринга Android.

if (((Editor)Element).HasBorder)
                {
                    GradientDrawable gd = new GradientDrawable();
                    gd.SetColor(Android.Resource.Color.HoloRedDark);
                    gd.SetCornerRadius(4);
                    gd.SetStroke(2, Android.Graphics.Color.LightGray);
                    Control.SetBackground(gd);
                }

Ответ 7

Создайте настраиваемый элемент управления как сетку. Создайте BoxView вокруг него и поместите редактор в середине с полем. Не красиво, но просто...

    <Grid xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:CustomControls="clr-namespace:xxx.CustomControls"
             x:Class="xxx.CustomControls.EditorWithBorder" BackgroundColor="White"
                x:Name="this">
    <Grid.RowDefinitions>
        <RowDefinitionCollection>
            <RowDefinition Height="1"/>
            <RowDefinition Height="1*"/>
            <RowDefinition Height="1"/>
        </RowDefinitionCollection>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinitionCollection>
            <ColumnDefinition Width="1"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1"/>
        </ColumnDefinitionCollection>
    </Grid.ColumnDefinitions>

    <Editor Text="{Binding Source={x:Reference this},Path=EditorText, Mode=TwoWay}" TextColor="Orange" Margin="20,10,20,10" FontSize="{StaticResource FontSizeLarge}"
                                Grid.Row="1" Grid.Column="1" />


    <BoxView Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" BackgroundColor="Orange"
             ></BoxView>

    <BoxView Grid.Row="0" Grid.Column="0" Grid.RowSpan="3" BackgroundColor="Orange"

             ></BoxView>

    <BoxView Grid.Row="0" Grid.Column="2" Grid.RowSpan="3" BackgroundColor="Orange" HeightRequest="1"

             ></BoxView>
    <BoxView Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" BackgroundColor="Orange" HeightRequest="1"

             ></BoxView>
</Grid>