Border Color For Editor In Xamarin.forms
Solution 1:
You may also archieve this by wrapping your Editor with a StackLayout
with BackgroundColor="your color"
and Padding="1"
and set the BackgroundColor
of your Editor to the same color of the form.
Something like this:
<StackLayoutBackgroundColor="White"><StackLayoutBackgroundColor="Black"Padding="1"><EditorBackgroundColor="White" /></StackLayout>
...
</StackLayout>
Not that fancy, but this will at least get you a border!
Solution 2:
Here's the complete solution I used. You need three things.
1 - A custom class that implements Editor
in your forms project.
publicclassBorderedEditor : Editor
{
}
2 - A custom renderer for your custom Editor
in your iOS project.
publicclassBorderedEditorRenderer : EditorRenderer
{
protectedoverridevoidOnElementChanged(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 - An ExportRenderer
attribute in your iOS project that tells Xamarin to use your custom renderer for your custom editor.
[assembly: ExportRenderer(typeof(BorderedEditor), typeof(BorderedEditorRenderer))]
Then use your custom editor in Xaml:
<custom:BorderedEditor Text="{Binding TextValue}"/>
Solution 3:
The easiest way is to add a frame around it.
<FrameBorderColor="LightGray"HasShadow="False"Padding="0"><Editor/></Frame>
Solution 4:
in your portable project add this control
publicclassPlaceholderEditor : Editor
{
publicstaticreadonly BindableProperty PlaceholderProperty =
BindableProperty.Create("Placeholder", typeof(string), typeof(string), "");
publicPlaceholderEditor()
{
}
publicstring Placeholder
{
get
{
return (string)GetValue(PlaceholderProperty);
}
set
{
SetValue(PlaceholderProperty, value);
}
}
}
in your android project add this renderer:
[assembly: ExportRenderer(typeof(PlaceholderEditor), typeof(PlaceholderEditorRenderer))]
namespaceTevel.Mobile.Packages.Droid
{
publicclassPlaceholderEditorRenderer : EditorRenderer
{
publicPlaceholderEditorRenderer() { }
protectedoverridevoidOnElementChanged(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;
}
}
protectedoverridevoidOnElementPropertyChanged(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;
}
}
}
}
in your Resources > drawable add an XML file borderEditText.xml
<?xml version="1.0" encoding="UTF-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_focused="true"><shapeandroid:shape="rectangle"><gradientandroid:startColor="#FFFFFF"android:endColor="#FFFFFF"android:angle="270" /><strokeandroid:width="3dp"android:color="#F8B334" /><cornersandroid:radius="12dp" /></shape></item><item><shapeandroid:shape="rectangle"><gradientandroid:startColor="#FFFFFF"android:endColor="#FFFFFF"android:angle="270" /><strokeandroid:width="3dp"android:color="#ccc" /><cornersandroid:radius="12dp" /></shape></item></selector>
Xaml:
Header - xmlns:ctrls="clr-namespace:my control namespace;assembly= my assembly"
control:
<ctrls:PlaceholderEditorVerticalOptions="Fill"HorizontalOptions="StartAndExpand"Placeholder="add my comment title"></ctrls:PlaceholderEditor>
Solution 5:
You will need to implement a Custom Renderer
(guide from Xamarin) for each platform since customizing the BorderColor
of an Entry
is not yet supported in Xamarin.Forms
.
Since you've already managed to change the BorderColor
on Android, you can find a solution for iOS here: http://forums.xamarin.com/discussion/comment/102557/#Comment_102557
Post a Comment for "Border Color For Editor In Xamarin.forms"