Xamarin Forms:隐藏编辑器或条目下划线

Sre*_*ree 2 xamarin.forms

我在我的用户界面中使用编辑器。但是黑色的下划线很烦人,有什么办法可以去掉那个下划线吗?

提前致谢

mdl*_*ars 6

在您的 Android 项目中创建自定义渲染器:

public class CustomEntryRenderer : EntryRenderer {
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) {
        base.OnElementChanged(e);
        Control.SetBackgroundColor(Android.Graphics.Color.Transparent);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的 XAML 中:

<ContentPage xmlns:xyz="clr-namespace:PclNamespaceForCustomControls">
    ...
    <xyz:CustomEntry Placeholder="Lorem ipsum" />
</ContentPage>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅 Microsoft 文档:https : //docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/entry

  • 多年来我见过的一些该死的最干净的代码。我刚刚将它粘贴到我的项目中,我的产品现在像热蛋糕一样热销。 (2认同)

Sre*_*ree 6

我已经使用custom renders.

##在PCL##

自定义条目.cs

using Xamarin.Forms;

namespace Entry_Editor_Sample
{
    public class CustomEntry : Entry
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义编辑器.cs

using Xamarin.Forms;

namespace Entry_Editor_Sample
{
    public class CustomEditor : Editor
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

##在安卓##

CustomEntryRenderer.cs

using Android.Content;
using Android.Content.Res;
using Android.Graphics.Drawables;
using Android.Text;
using Entry_Editor_Sample;
using Entry_Editor_Sample.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))]

namespace Entry_Editor_Sample.Droid
{
    class CustomEntryRenderer : EntryRenderer
    {
        public CustomEntryRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                GradientDrawable gd = new GradientDrawable();
                gd.SetColor(global::Android.Graphics.Color.Transparent);
                this.Control.SetBackgroundDrawable(gd);
                this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
                //Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.White));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义编辑器渲染器.cs

using Android.Content;
using Android.Content.Res;
using Android.Graphics.Drawables;
using Android.Text;
using Entry_Editor_Sample;
using Entry_Editor_Sample.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]

namespace Entry_Editor_Sample.Droid
{
    class CustomEditorRenderer : EditorRenderer
    {
        public CustomEditorRenderer(Context context) : base(context)
        {
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                GradientDrawable gd = new GradientDrawable();
                gd.SetColor(global::Android.Graphics.Color.Transparent);
                this.Control.SetBackgroundDrawable(gd);
                this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
                //Control.SetHintTextColor(ColorStateList.ValueOf(global::Android.Graphics.Color.Black));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

##在IOS##

CustomEntryRenderer.cs

using Entry_Editor_Sample;
using Entry_Editor_Sample.iOS;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryRenderer))]

namespace Entry_Editor_Sample.iOS
{
    class CustomEntryRenderer : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.BorderStyle = UITextBorderStyle.None;
                Control.Layer.CornerRadius = 10;
                //Control.TextColor = UIColor.Black;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义编辑器渲染器.cs

using Entry_Editor_Sample;
using Entry_Editor_Sample.iOS;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]

namespace Entry_Editor_Sample.iOS
{
    class CustomEditorRenderer : EditorRenderer
    {
        public CustomEditorRenderer()
        {
            UIKeyboard.Notifications.ObserveWillShow((sender, args) =>
            {
                if (Element != null)
                {
                    Element.Margin = new Thickness(0, 0, 0, args.FrameEnd.Height); //push the entry up to keyboard height when keyboard is activated
                }
            });

            UIKeyboard.Notifications.ObserveWillHide((sender, args) =>
            {
                if (Element != null)
                {
                    Element.Margin = new Thickness(0); //set the margins to zero when keyboard is dismissed
                }
            });
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.Layer.CornerRadius = 10;
                Control.TextColor = UIColor.Black;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

##终于在MainPage.xaml##

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:local="clr-namespace:Entry_Editor_Sample"
             mc:Ignorable="d"
             BackgroundColor="White"
             xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
             ios:Page.UseSafeArea="true"
             x:Class="Entry_Editor_Sample.MainPage">

    <StackLayout
        VerticalOptions="CenterAndExpand"
        HorizontalOptions="FillAndExpand"
        BackgroundColor="White">

        <local:CustomEntry
            BackgroundColor="SkyBlue"
            Placeholder="Entry"
            PlaceholderColor="Black"
            TextColor="Black"/>

        <local:CustomEditor
            BackgroundColor="SkyBlue"
            Placeholder="Editor"
            HeightRequest="100"
            PlaceholderColor="Black"
            TextColor="Black"/>
    </StackLayout>
</ContentPage>
Run Code Online (Sandbox Code Playgroud)

我在这里上传了一个样本:)