Как я могу сделать цвет рамки для редактора в Xamarin.Forms?
Я использовал эту ссылку но она работает только для Android. Я хочу, чтобы он работал на всех платформах!
Я немного новичок в этом. Пожалуйста, помогите мне.
Любая идея?
Как я могу сделать цвет рамки для редактора в Xamarin.Forms?
Я использовал эту ссылку но она работает только для Android. Я хочу, чтобы он работал на всех платформах!
Я немного новичок в этом. Пожалуйста, помогите мне.
Любая идея?
Вы также можете архивировать это, обернув редактор с помощью StackLayout
с помощью BackgroundColor="your color"
и Padding="1"
и установите BackgroundColor
вашего редактора в тот же цвет формы.
Что-то вроде этого:
<StackLayout BackgroundColor="White"> <StackLayout BackgroundColor="Black" Padding="1"> <Editor BackgroundColor="White" /> </StackLayout> ... </StackLayout>
Не то, что вам нравится, но это, по крайней мере, даст вам границу!
Вот полное решение, которое я использовал. Вам нужно три вещи.
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}"/>
в вашем переносном проекте добавьте этот элемент управления
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>
Для каждой платформы вам потребуется реализовать Custom Renderer
(руководство от Xamarin), поскольку настройка BorderColor
Entry
еще не поддерживается в Xamarin.Forms
.
Поскольку вам уже удалось изменить BorderColor
на Android, вы можете найти решение для iOS здесь: http://forums.xamarin.com/discussion/comment/102557/#Comment_102557
Это работает точно, попробуйте это.
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);
}
}
}
простой способ для рендеринга 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);
}
Создайте настраиваемый элемент управления как сетку. Создайте 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>