如何使用Xamarin表单从条目控件中删除边框

时间:2018-11-01 06:03:17

标签: xamarin.forms

如何使用xamarin控件从输入框中删除以下控件的边框。

<Entry Text="" />

enter image description here

目前,我在文本框上看到一个细边框,在这里看不到要删除的任何border属性。

请让我知道如何禁用此功能。

4 个答案:

答案 0 :(得分:6)

有些控件的属性无法通过Xamarin.Forms进行操作,因此您必须实现effectcustom 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;
    }
}

首先,通过设置本机控件的LeftViewRightView,向控件添加了一些填充(否则看起来很难看)。无论如何,通过设置本机控件的此属性,更有趣的部分包括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)