Xamarin.forms 渐变作为一种颜色?

Xamarin.forms 渐变作为一种颜色?,xamarin.forms,xamarin.ios,gradient,xamarin.uwp,border-color,Xamarin.forms,Xamarin.ios,Gradient,Xamarin.uwp,Border Color,我想为Xamarin.Forms按钮设置渐变边框颜色。我该怎么做 当前: 欲望: 有几个选项通过谷歌登上了榜首,但似乎没有一个是独立于平台的,适合按钮 说出一对夫妇的名字: -使用WebView并使用CSS设置渐变背景 (来源:) -看起来是一个设计出色的解决方案,但不幸的是,正如所写的,它的范围似乎只是单元视图和布局。同样地,即使这对按钮有效,它似乎只是iOS和Android desire是一个iOS&UWP兼容的解决方案,用于将渐变应用于按钮的边框颜色 做了一些初步的挖掘,还没有找到任何

我想为Xamarin.Forms按钮设置渐变边框颜色。我该怎么做

当前:

欲望:

有几个选项通过谷歌登上了榜首,但似乎没有一个是独立于平台的,适合按钮

说出一对夫妇的名字:
-使用WebView并使用CSS设置渐变背景 (来源:)
-看起来是一个设计出色的解决方案,但不幸的是,正如所写的,它的范围似乎只是单元视图和布局。同样地,即使这对按钮有效,它似乎只是iOS和Android

desire是一个iOS&UWP兼容的解决方案,用于将渐变应用于按钮的边框颜色

做了一些初步的挖掘,还没有找到任何按钮。如果我错过了SO上关于按钮边框颜色属性渐变的帖子,我深表歉意。

您可以使用。用法非常简单,您可以查看文档。

您可以自定义以Xamarin形式实现渐变边框。在
OnElementChanged
override方法中编辑属性。您可以传递一个to
控件。BorderBrush
以在UWP中实现此功能。有关详细信息,请参考以下代码

UWP

public class MyButtonRenderer : ButtonRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {
            if (Element.IsSet(Button.BorderColorProperty) && Element.BorderColor != (Color)Button.BorderColorProperty.DefaultValue)
            {
                UpdateBorderColor();
            }

        }
    }
    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);
        if (e.PropertyName == Button.BorderColorProperty.PropertyName)
        {
            UpdateBorderColor();
        }
    }
    void UpdateBorderColor()
    {
        Control.BorderBrush = Element.BorderColor != Color.Default ? Element.BorderColor.ToGradientBrush() : (Brush)Windows.UI.Xaml.Application.Current.Resources["ButtonBorderThemeBrush"];
    }

}
internal static class ConvertExtensions
{
    public static Brush ToGradientBrush(this Color color)
    {
        var GradientBrush = new LinearGradientBrush();
        GradientBrush.StartPoint = new Windows.Foundation.Point(0.5, 0);
        GradientBrush.EndPoint = new Windows.Foundation.Point(0.5, 1);
        GradientBrush.GradientStops.Add(new GradientStop() { Color = Windows.UI.Colors.LightGray, Offset = 0.0 });
        GradientBrush.GradientStops.Add(new GradientStop() { Color = color.ToWindowsColor(), Offset = 1.0 });
        return GradientBrush;
    }

    public static Windows.UI.Color ToWindowsColor(this Color color)
    {
        return Windows.UI.Color.FromArgb((byte)(color.A * 255), (byte)(color.R * 255), (byte)(color.G * 255), (byte)(color.B * 255));
    }

}
公共类MyButtonRenderer:ButtonRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(例如NewElement!=null)
{
if(Element.IsSet(Button.BorderColorProperty)&&Element.BorderColor!=(Color)Button.BorderColorProperty.DefaultValue)
{
updateOrderColor();
}
}
}
受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e);
if(e.PropertyName==Button.BorderColorProperty.PropertyName)
{
updateOrderColor();
}
}
void updateOrderColor()
{
Control.BorderBrush=Element.BorderColor!=Color.Default?Element.BorderColor.ToGradientBrush():(Brush)Windows.UI.Xaml.Application.Current.Resources[“buttonorderthemebrush”];
}
}
内部静态类扩展
{
公共静态笔刷ToGradientBrush(此颜色)
{
var GradientBrush=新的LinearGradientBrush();
渐变画笔.StistPoint=新Windows .Frimo.Point(0.5,0);
渐变画笔。端点=新窗口.Frime.Point(0.5,1);
GradientBrush.GradientStops.Add(新的GradientStop(){Color=Windows.UI.Colors.LightGray,Offset=0.0});
GradientBrush.GradientStops.Add(新的GradientStop(){Color=Color.ToWindowsColor(),Offset=1.0});
返回梯度刷;
}
公共静态Windows.UI.Color到Windows颜色(此颜色)
{
返回Windows.UI.Color.FromArgb((字节)(Color.A*255),(字节)(Color.R*255),(字节)(Color.G*255),(字节)(Color.B*255));
}
}
IOS

public class MyButtonRenderer : ButtonRenderer
{
   CAGradientLayer gradient;
   CAShapeLayer shape;
   protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
    {
        base.OnElementChanged(e);

        gradient = new CAGradientLayer(); 
        // add start color          
        gradient.Colors = new CGColor[] { ((GradientButton)Element).StartColor.ToCGColor(), Element.BorderColor.ToCGColor() };

       shape = new CAShapeLayer();
       shape.LineWidth = (nfloat)(Element.BorderWidth);
       shape.StrokeColor = UIColor.Black.CGColor;
       shape.FillColor = UIColor.Clear.CGColor;
       gradient.Mask = shape;

       Control.Layer.AddSublayer(gradient);
       Control.Layer.BorderColor = UIColor.Clear.CGColor;
    }

     public override void Draw(CGRect rect)
     {
       base.Draw(rect);

       shape.Path = UIBezierPath.FromRect(rect).CGPath;
       gradient.Frame = rect;
     }
}
公共类MyButtonRenderer:ButtonRenderer
{
辐射层梯度;
分层形状;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
梯度=新的CAGradientLayer();
//添加起始颜色
gradient.Colors=新的CGColor[]{((GradientButton)元素).StartColor.togcolor(),Element.BorderColor.togcolor()};
形状=新层();
shape.LineWidth=(nfloat)(Element.BorderWidth);
shape.StrokeColor=UIColor.Black.CGColor;
shape.FillColor=UIColor.Clear.CGColor;
渐变。遮罩=形状;
控制层添加子层(梯度);
Control.Layer.BorderColor=UIColor.Clear.CGColor;
}
公共覆盖无效绘制(CGRect rect)
{
基础绘制(rect);
shape.Path=UIBezierPath.FromRect(rect.CGPath);
梯度。帧=矩形;
}
}


这是包含UWP和IOS平台的。请检查。

您是否查看了css
外观