-
-
Save khle/ac87eafddabf3678b0cac9dfb9da1a35 to your computer and use it in GitHub Desktop.
Xamarin.Forms Entry just with bottom border.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Xamarin.Forms; | |
namespace YOUTNAMESPACE | |
{ | |
public class LineEntry : Entry | |
{ | |
public static readonly BindableProperty BorderColorProperty = | |
BindableProperty.Create<LineEntry, Color> (p => p.BorderColor, Color.Black); | |
public Color BorderColor { | |
get { return (Color)GetValue (BorderColorProperty); } | |
set { SetValue (BorderColorProperty, value); } | |
} | |
public static readonly BindableProperty FontSizeProperty = | |
BindableProperty.Create<LineEntry, double> (p => p.FontSize, Font.Default.FontSize); | |
public double FontSize { | |
get { return (double)GetValue (FontSizeProperty); } | |
set { SetValue (FontSizeProperty, value); } | |
} | |
public static readonly BindableProperty PlaceholderColorProperty = | |
BindableProperty.Create<LineEntry, Color> (p => p.PlaceholderColor, Color.Default); | |
public Color PlaceholderColor { | |
get { return (Color)GetValue (PlaceholderColorProperty); } | |
set { SetValue (PlaceholderColorProperty, value); } | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Xamarin.Forms.Platform.iOS; | |
using Xamarin.Forms; | |
using UIKit; | |
using YOUTNAMESPACE.iOS; | |
using System.ComponentModel; | |
using CoreAnimation; | |
using Foundation; | |
[assembly: ExportRenderer (typeof(YOUTNAMESPACE.LineEntry), typeof(LineEntryRenderer))] | |
namespace YOUTNAMESPACE.iOS | |
{ | |
public class LineEntryRenderer: EntryRenderer | |
{ | |
protected override void OnElementChanged (ElementChangedEventArgs<Entry> e) | |
{ | |
base.OnElementChanged (e); | |
if (Control != null) { | |
Control.BorderStyle = UITextBorderStyle.None; | |
var view = (Element as LineEntry); | |
if (view != null) { | |
DrawBorder (view); | |
SetFontSize (view); | |
SetPlaceholderTextColor (view); | |
} | |
} | |
} | |
protected override void OnElementPropertyChanged (object sender, PropertyChangedEventArgs e) | |
{ | |
base.OnElementPropertyChanged (sender, e); | |
var view = (LineEntry)Element; | |
if (e.PropertyName.Equals (view.BorderColor)) | |
DrawBorder (view); | |
if (e.PropertyName.Equals (view.FontSize)) | |
SetFontSize (view); | |
if (e.PropertyName.Equals (view.PlaceholderColor)) | |
SetPlaceholderTextColor (view); | |
} | |
void DrawBorder (LineEntry view) | |
{ | |
var borderLayer = new CALayer (); | |
borderLayer.MasksToBounds = true; | |
borderLayer.Frame = new CoreGraphics.CGRect (0f, Frame.Height / 2, Frame.Width, 1f); | |
borderLayer.BorderColor = view.BorderColor.ToCGColor (); | |
borderLayer.BorderWidth = 1.0f; | |
Control.Layer.AddSublayer (borderLayer); | |
Control.BorderStyle = UITextBorderStyle.None; | |
} | |
void SetFontSize (LineEntry view) | |
{ | |
if (view.FontSize != Font.Default.FontSize) | |
Control.Font = UIFont.SystemFontOfSize ((System.nfloat)view.FontSize); | |
else if (view.FontSize == Font.Default.FontSize) | |
Control.Font = UIFont.SystemFontOfSize (17f); | |
} | |
void SetPlaceholderTextColor (LineEntry view) | |
{ | |
if (string.IsNullOrEmpty (view.Placeholder) == false && view.PlaceholderColor != Color.Default) { | |
var placeholderString = new NSAttributedString (view.Placeholder, | |
new UIStringAttributes { ForegroundColor = view.PlaceholderColor.ToUIColor () }); | |
Control.AttributedPlaceholder = placeholderString; | |
} | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment