答案 0 :(得分:6)
有些控件的属性无法通过Xamarin.Forms进行操作,因此您必须实现effect或custom renderer。效果可能适合您的情况,但是由于我精通自定义渲染器,因此我将向您展示如何使用自定义渲染器实现所需的功能。
您必须创建一个从EntryRenderer
派生的类,该类将覆盖OnElementChanged
public class CustomEntryRenderer : EntryRenderer
{
override override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
this.Control.LeftView = new UIView(new CGRect(0, 0, 8, this.Control.Frame.Height));
this.Control.RightView = new UIView(new CGRect(0, 0, 8, this.Control.Frame.Height));
this.Control.LeftViewMode = UITextFieldViewMode.Always;
this.Control.RightViewMode = UITextFieldViewMode.Always;
this.Control.BorderStyle = UITextBorderStyle.None;
this.Element.HeightRequest = 30;
}
}
首先,通过设置本机控件的LeftView
和RightView
,向控件添加了一些填充(否则看起来很难看)。无论如何,通过设置本机控件的此属性,更有趣的部分包括BorderStyle
,您可以删除控件的边框。
最后要做的就是说Xamarin.Forms使用该渲染器。在文件的全局范围内(在名称空间声明之外)使用以下属性:
[assembly: ExportRenderer(typeof(Entry), typeof(CustomEntryRenderer))]
如果您不希望将样式应用于所有条目,则必须定义Xamarin中的CustomEntry
派生的Entry
类。 Forms项目将上面显示的行更改为
[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))]
请注意:这是iOS实现,但对于Android基本上相同。
答案 1 :(得分:1)
没有此类属性可删除条目中的边框。如果要删除它,则必须制作渲染器。 Please Refer this Link
答案 2 :(得分:1)
同意其他答复,不幸的是,如果不使用Effect或CustomRenderers,Entry不可能做到这一点。
我仅使用PCL的方法是使用 Editor ,因为它具有更丰富的样式集,并且没有令人讨厌的边框。您需要编写的唯一的额外代码是TextChanged事件处理程序,以捕获按下“ enter”的用户,该用户刚刚在Editor中创建了新行。事件处理代码如下:
searchBox.Completed += (s, e) => {
DoSearch();
};
// Check for return pressed as well as we are now using an Editor
searchBox.TextChanged += (s, e) => {
if (e.NewTextValue.EndsWith("\n") == true) {
// trim the text
searchBox.Text = searchBox.Text.Trim();
// unfocus the box
searchBox.Unfocus();
// search
DoSearch();
}
};
希望这会有所帮助-作为参考Xamarin,这已经困扰了很多年-请在不久的将来更新中显示Entry字段的边界!
答案 3 :(得分:0)
将此类添加到 Android 项目的MainActivity.cs
中:
public class CustomEntryRenderer : EntryRenderer
{
public CustomEntryRenderer(Context context) : base(context) { }
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if(e.OldElement == null)
{
Control.Background = null;
var lp = new MarginLayoutParams(Control.LayoutParameters);
lp.SetMargins(0, 0, 0, 0);
LayoutParameters = lp;
Control.LayoutParameters = lp;
Control.SetPadding(0, 0, 0, 0);
SetPadding(0, 0, 0, 0);
}
}
}
并在命名空间之前添加以下行:
[assembly: ExportRenderer(typeof(Entry), typeof(CustomEntryRenderer))]
然后在 iOS 上将此类添加到Main.cs
:
public class CustomEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
Control.Layer.BorderWidth = 0;
Control.BorderStyle = UITextBorderStyle.None;
}
}
和:
[assembly: ExportRenderer(typeof(Entry), typeof(App1.iOS.CustomEntryRenderer))]
仅针对特殊课程或习俗进入设置此更改,只需将typeof(Entry)
更改为typeof(MyEntry)
。