如何制作圆角入口控件Xamarin.Forms

如何制作圆角入口控件Xamarin.Forms,xamarin,xamarin.ios,xamarin.android,xamarin.forms,Xamarin,Xamarin.ios,Xamarin.android,Xamarin.forms,我必须在Xamarin.Forms中使用圆角条目,但我还没有得到任何解决方案 我正在尝试获得这种外观和感觉: 请帮我解决这个问题 我有完全相同的要求,并决定创建名为EntryEx的自定义控件。您可以找到源代码 以下是此控件支持的函数列表 设置边框颜色 设置边框宽度 设置角半径 您还可以设置左侧和右侧填充以从左侧和右侧插入条目内容 我已经为iOS和Android创建了自定义渲染器以支持此属性。 要使用该控件,只需执行以下操作 将EntryEx添加到表单项目中 将iOS和Android的Entr

我必须在Xamarin.Forms中使用圆角条目,但我还没有得到任何解决方案

我正在尝试获得这种外观和感觉:


请帮我解决这个问题

我有完全相同的要求,并决定创建名为
EntryEx
的自定义控件。您可以找到源代码

以下是此控件支持的函数列表

  • 设置边框颜色
  • 设置边框宽度
  • 设置角半径
  • 您还可以设置左侧和右侧填充以从左侧和右侧插入条目内容 我已经为iOS和Android创建了自定义渲染器以支持此属性。 要使用该控件,只需执行以下操作

  • EntryEx
    添加到表单项目中
  • 将iOS和Android的
    EntryExRenderer
    -s添加到相应的项目中
  • 对于android,您还需要添加BorderRenderer
  • 调整名称空间

  • 就这些。享受。

    我有完全相同的要求,决定创建名为
    EntryEx
    的自定义控件。您可以找到源代码

    以下是此控件支持的函数列表

  • 设置边框颜色
  • 设置边框宽度
  • 设置角半径
  • 您还可以设置左侧和右侧填充以从左侧和右侧插入条目内容 我已经为iOS和Android创建了自定义渲染器以支持此属性。 要使用该控件,只需执行以下操作

  • EntryEx
    添加到表单项目中
  • 将iOS和Android的
    EntryExRenderer
    -s添加到相应的项目中
  • 对于android,您还需要添加BorderRenderer
  • 调整名称空间

  • 就这些。享受。

    我不确定这种方法是否有问题,因为它看起来很简单,但没有人建议它

    但是我不明白为什么不能将
    isclippedtobunds
    设置为
    true
    时使用
    Frame
    。这将为您提供一个内置的拐角半径,您可以根据需要进行调整

            <Grid>               
                 <Frame
                       Padding = "0"
                       CornerRadius     ="20"
                       IsClippedToBounds="true">
                    <Editor [...whatever...]/>
                </Frame>
             </Grid>
    
    
    

    我目前正在使用这个解决方案,它对我很有效。

    我不确定这种方法是否有问题,因为它看起来很简单,但没有人建议它

    但是我不明白为什么不能将
    isclippedtobunds
    设置为
    true
    时使用
    Frame
    。这将为您提供一个内置的拐角半径,您可以根据需要进行调整

            <Grid>               
                 <Frame
                       Padding = "0"
                       CornerRadius     ="20"
                       IsClippedToBounds="true">
                    <Editor [...whatever...]/>
                </Frame>
             </Grid>
    
    
    

    我目前正在使用此解决方案,它对我很有效。

    kyurkchyan的解决方案非常成功,只需将Android entryRendere中的UpdateBackground方法更改为:

    private void UpdateBackground(XEntry xEntry)
        {
            if (_renderer != null)
            {
                _renderer.Dispose();
                _renderer = null;
            }
            var oldBg = xEntry.BackgroundColor;
            xEntry.BackgroundColor = Xamarin.Forms.Color.Transparent;
            _renderer = new BorderRenderer();
            Control.SetBackground(_renderer.GetBorderBackground(xEntry.BorderColor, oldBg, xEntry.BorderWidth, xEntry.BorderRadius));
    
        }
    

    它也可以在Android上运行

    kyurkchyan的解决方案非常成功,只需将Android EntryRender中的UpdateBackground方法更改为:

    private void UpdateBackground(XEntry xEntry)
        {
            if (_renderer != null)
            {
                _renderer.Dispose();
                _renderer = null;
            }
            var oldBg = xEntry.BackgroundColor;
            xEntry.BackgroundColor = Xamarin.Forms.Color.Transparent;
            _renderer = new BorderRenderer();
            Control.SetBackground(_renderer.GetBorderBackground(xEntry.BorderColor, oldBg, xEntry.BorderWidth, xEntry.BorderRadius));
    
        }
    


    它也可以在Android上运行

    Thanx@kyurkchyan寻求帮助。@kyurkchyan效果很好。当用户开始输入时,如何在条目的最右边放置一个十字图标以清除条目字段。您可以使用网格。设置条目的右边(如果您希望右边有x)padding属性(这将确保条目内的文本不会与x按钮重叠),然后在网格中创建两列。将条目的columnspan设置为2,并在网格的第二列中放置一个带有x图标的按钮。@kyurkchyan在不指定背景色的情况下工作。一旦你这样做,你就会失去圆角。Thanx@kyurkchyan寻求帮助。@kyurkchyan效果很好。当用户开始输入时,如何在条目的最右边放置一个十字图标以清除条目字段。您可以使用网格。设置条目的右边(如果您希望右边有x)padding属性(这将确保条目内的文本不会与x按钮重叠),然后在网格中创建两列。将条目的columnspan设置为2,并在网格的第二列中放置一个带有x图标的按钮。@kyurkchyan在不指定背景色的情况下工作。一旦这样做,您将失去圆角。IsClippedToBounds到底做什么?此解决方案可行,但您也需要将帧的填充设置为0。这是一个很好的解决方案@詹姆斯韦斯特盖特,谢谢你,你说得对。我编辑了这篇文章以反映这一点。@GarthSebastian我不是专家,但我相信它使框架和其中的所有内容只显示框架本身边界内的内容。一个框架一开始就可以显示其边界之外的东西,这可能看起来很奇怪,但我认为默认情况下它可以。因此,当设置IsClippedToBounds=“true”时,使帧内的内容仅显示刚设置的角半径内的内容,如果将其保留为“false”,更改半径实际上看不到任何效果。IsClippedToBounds到底做什么?此解决方案可行,但您也需要将帧的填充设置为0。这是一个很好的解决方案@詹姆斯韦斯特盖特,谢谢你,你说得对。我编辑了这篇文章以反映这一点。@GarthSebastian我不是专家,但我相信它使框架和其中的所有内容只显示框架本身边界内的内容。一个框架一开始就可以显示其边界之外的东西,这可能看起来很奇怪,但我认为默认情况下它可以。因此,当您设置IsClippedToBounds=“true”时,您会使帧内的内容仅显示刚设置的角半径内的内容,如果将其保留为“false”,您实际上不会看到更改半径的任何效果。