C# 如何创建xamarin窗体按钮左角半径

C# 如何创建xamarin窗体按钮左角半径,c#,android,ios,xamarin.forms,C#,Android,Ios,Xamarin.forms,我正在寻找一种为xamarin表单中的按钮创建自定义渲染器的方法,这样我就可以在按钮的左侧获得圆角。我尝试过寻找一个解决方案,但没有任何运气。有一个非常流行的开源项目可以帮助解决您面临的挑战。如果出于某种原因,您仍然希望自己解决这个问题,而不引入外部依赖,那么您可以检查这个项目的源代码,以更好地了解如何实现它 另一种选择是更精确地搜索web,并像这样检查线程 祝你好运。有一个非常流行的开源项目,它可以帮助你解决面临的挑战。如果出于某种原因,您仍然希望自己解决这个问题,而不引入外部依赖,那么您可以

我正在寻找一种为xamarin表单中的按钮创建自定义渲染器的方法,这样我就可以在按钮的左侧获得圆角。我尝试过寻找一个解决方案,但没有任何运气。

有一个非常流行的开源项目可以帮助解决您面临的挑战。如果出于某种原因,您仍然希望自己解决这个问题,而不引入外部依赖,那么您可以检查这个项目的源代码,以更好地了解如何实现它

另一种选择是更精确地搜索web,并像这样检查线程


祝你好运。

有一个非常流行的开源项目,它可以帮助你解决面临的挑战。如果出于某种原因,您仍然希望自己解决这个问题,而不引入外部依赖,那么您可以检查这个项目的源代码,以更好地了解如何实现它

另一种选择是更精确地搜索web,并像这样检查线程

祝你好运。

在Android上,你可以在名为
layout\u bg
drawable
文件夹中使用:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dp" android:color="#B1BCBE" />
    <corners
        android:topLeftRadius="10dp"
        android:bottomLeftRadius="10dp"/>
</shape>

在自定义渲染中:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
    base.OnElementChanged(e);
    if (Control != null) {
        Control.SetBackgroundResource(Resource.Drawable.layout_bg);
    }
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null){
控件.SetBackgroundResource(Resource.Drawable.layout\u bg);
}
}
结果:

在Android上,您可以在名为
layout\u bg
drawable
文件夹中使用:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dp" android:color="#B1BCBE" />
    <corners
        android:topLeftRadius="10dp"
        android:bottomLeftRadius="10dp"/>
</shape>

在自定义渲染中:

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
    base.OnElementChanged(e);
    if (Control != null) {
        Control.SetBackgroundResource(Resource.Drawable.layout_bg);
    }
}
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null){
控件.SetBackgroundResource(Resource.Drawable.layout\u bg);
}
}
结果:


用于为按钮或任何控件创建不同的角半径。您需要在float[]数组变量中声明左上角、右上角、左下角和右下角半径,并在GradientDrawable的SetCornerRadii()方法中传递float变量

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{

  base.OnElementChanged(e);

        if (Control != null)
        {
            Control.SetAllCaps(false);
            GradientDrawable gradientDrawable = new GradientDrawable();                
            float[] radius= new float[8];
            radius[0] = 46f;   //Top Left corner
            radius[1] = 46f;   //Top Left corner
            radius[2] = 0;     //Top Right corner
            radius[3] = 0;     //Top Right corner
            radius[4] = 0;     //Bottom Right corner
            radius[5] = 0;     //Bottom Right corner
            radius[6] = 46f;   //Bottom Left corner
            radius[7] = 46f;   //Bottom Left corner
            gradientDrawable.SetCornerRadii(radius);
            Control.SetBackground(gradientDrawable);
        }
    }
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
控制。设置所有上限(假);
GradientDrawable GradientDrawable=新的GradientDrawable();
浮动[]半径=新浮动[8];
半径[0]=46f;//左上角
半径[1]=46f;//左上角
半径[2]=0;//右上角
半径[3]=0;//右上角
半径[4]=0;//右下角
半径[5]=0;//右下角
半径[6]=46f;//左下角
半径[7]=46f;//左下角
梯度可绘制。设置角半径(半径);
对照:立根台(可水平拉伸);
}
}

用于为按钮或任何控件创建不同的角半径。您需要在float[]数组变量中声明左上角、右上角、左下角和右下角半径,并在GradientDrawable的SetCornerRadii()方法中传递float变量

protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{

  base.OnElementChanged(e);

        if (Control != null)
        {
            Control.SetAllCaps(false);
            GradientDrawable gradientDrawable = new GradientDrawable();                
            float[] radius= new float[8];
            radius[0] = 46f;   //Top Left corner
            radius[1] = 46f;   //Top Left corner
            radius[2] = 0;     //Top Right corner
            radius[3] = 0;     //Top Right corner
            radius[4] = 0;     //Bottom Right corner
            radius[5] = 0;     //Bottom Right corner
            radius[6] = 46f;   //Bottom Left corner
            radius[7] = 46f;   //Bottom Left corner
            gradientDrawable.SetCornerRadii(radius);
            Control.SetBackground(gradientDrawable);
        }
    }
protected override void OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
控制。设置所有上限(假);
GradientDrawable GradientDrawable=新的GradientDrawable();
浮动[]半径=新浮动[8];
半径[0]=46f;//左上角
半径[1]=46f;//左上角
半径[2]=0;//右上角
半径[3]=0;//右上角
半径[4]=0;//右下角
半径[5]=0;//右下角
半径[6]=46f;//左下角
半径[7]=46f;//左下角
梯度可绘制。设置角半径(半径);
对照:立根台(可水平拉伸);
}
}

在向下投票时要轻松,没有教程或关于此主题的任何内容,按钮只在一侧四舍五入。在向下投票时要轻松,没有教程或关于此主题的任何内容,按钮只在一侧四舍五入。这是如何回答问题的?
SetCornerRadius
是否只影响请求的特定拐角?您好!虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。很抱歉,时间太短了,但我在度假前没有时间;)无论如何,我希望它能帮助一个或其他开发者<代码>(设置拐角半径)应用于所有拐角。在
OnElementChanged
方法中的XF android自定义渲染器代码中使用此代码,它应该是word。我在自己创建的一个按钮中使用它,这个按钮来自于Android.Widget.button。这是如何回答这个问题的?
SetCornerRadius
是否只影响请求的特定拐角?您好!虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。很抱歉,时间太短了,但我在度假前没有时间;)无论如何,我希望它能帮助一个或其他开发者<代码>(设置拐角半径)应用于所有拐角。在
OnElementChanged
方法中的XF android自定义渲染器代码中使用此代码,然后