自定义渲染器中的 xamarin 表单按钮背景颜色
xamarin form button background color in custom renderer
我正在尝试以 xamarin 形式设置背景颜色。为此,我想我可能会使用 CustomRenderer。我想从十六进制值设置背景颜色。下面是我的代码,我发现很难设置背景颜色。我想在 windows 8.1 和 UWP 中设置它。如果有人能在 android 中告诉我如何操作,我将不胜感激。
[assembly: ExportRendererAttribute(typeof(PrimaryButton), typeof(PrimaryButtonRenderer))]
namespace ShareSpecial.Windows
{
public class PrimaryButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.BackgroundColor = //some color from hex string
}
}
}
}
Xamarin Forms中的Colorclass有一个方法FromHex,可以很方便的实现各平台颜色转换的扩展方法。在 Android 中已经有一个名为 ToAndroid().
的默认实现
对于 WP8 和 UWP:
定义这个扩展:
static class ConvertExtensions
{
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));
}
}
您的渲染器代码为:
Control.BackgroundColor = new SolidColorBrush(Color.FromHex("ffffffff").ToWindowsColor());
对于Android:
如果您使用 SetBackgroundColor() 方法更改背景颜色,您将失去点击效果,要保持它,请使用以下代码:
Color backgroundColor = Color.FromHex("ffffffff");
int num = backgroundColor.ToAndroid().ToArgb();
int num2 = backgroundColor.MultiplyAlpha(0.5).ToAndroid().ToArgb();
base.Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new int[] {
num,
num2
});
您必须扩展您的渲染器:Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
您应该使用 SolidColorBrush
来设置 Windows 平台元素的颜色。
Control.BackgroundColor = 到Windows刷(Color.Red);
这里有一个方法可以将Xamarin.Froms.Color
转换为SolidColorBrush
public static SolidColorBrush ToWindowsBrush(Xamarin.Forms.Color color)
{
if (color.A < 0)
return new SolidColorBrush(Windows.UI.Colors.Transparent);
var winColor = Windows.UI.Color.FromArgb((byte)(color.A * 255),
(byte)(color.R * 255),
(byte)(color.G * 255),
(byte)(color.B * 255));
return new SolidColorBrush(winColor);
}
在@Hichaam 的帮助下完成工作并发布工作 android 解决方案
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms;
using ShareSpecial.Utils.Controls;
using ShareSpecial.Droid.Custom.Control.Buttons;
using Android.Content.Res;
[assembly: ExportRendererAttribute(typeof(SuccessButton), typeof(SuccessButtonRenderer))]
namespace ShareSpecial.Droid.Custom.Control.Buttons
{
public class SuccessButtonRenderer : Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
{
public SuccessButtonRenderer() { }
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> changeEvent)
{
base.OnElementChanged(changeEvent);
var backgroundColor = Color.FromHex("43ac6a");
int num = backgroundColor.ToAndroid().ToArgb();
int num2 = backgroundColor.MultiplyAlpha(0.5).ToAndroid().ToArgb();
Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new int[] { num, num2 });
Control.SetTextColor(Color.FromHex("#ffffff").ToAndroid());
}
}
}
我正在尝试以 xamarin 形式设置背景颜色。为此,我想我可能会使用 CustomRenderer。我想从十六进制值设置背景颜色。下面是我的代码,我发现很难设置背景颜色。我想在 windows 8.1 和 UWP 中设置它。如果有人能在 android 中告诉我如何操作,我将不胜感激。
[assembly: ExportRendererAttribute(typeof(PrimaryButton), typeof(PrimaryButtonRenderer))]
namespace ShareSpecial.Windows
{
public class PrimaryButtonRenderer : ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.BackgroundColor = //some color from hex string
}
}
}
}
Xamarin Forms中的Colorclass有一个方法FromHex,可以很方便的实现各平台颜色转换的扩展方法。在 Android 中已经有一个名为 ToAndroid().
的默认实现对于 WP8 和 UWP:
定义这个扩展:
static class ConvertExtensions
{
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));
}
}
您的渲染器代码为:
Control.BackgroundColor = new SolidColorBrush(Color.FromHex("ffffffff").ToWindowsColor());
对于Android:
如果您使用 SetBackgroundColor() 方法更改背景颜色,您将失去点击效果,要保持它,请使用以下代码:
Color backgroundColor = Color.FromHex("ffffffff");
int num = backgroundColor.ToAndroid().ToArgb();
int num2 = backgroundColor.MultiplyAlpha(0.5).ToAndroid().ToArgb();
base.Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new int[] {
num,
num2
});
您必须扩展您的渲染器:Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
您应该使用 SolidColorBrush
来设置 Windows 平台元素的颜色。
Control.BackgroundColor = 到Windows刷(Color.Red);
这里有一个方法可以将Xamarin.Froms.Color
转换为SolidColorBrush
public static SolidColorBrush ToWindowsBrush(Xamarin.Forms.Color color)
{
if (color.A < 0)
return new SolidColorBrush(Windows.UI.Colors.Transparent);
var winColor = Windows.UI.Color.FromArgb((byte)(color.A * 255),
(byte)(color.R * 255),
(byte)(color.G * 255),
(byte)(color.B * 255));
return new SolidColorBrush(winColor);
}
在@Hichaam 的帮助下完成工作并发布工作 android 解决方案
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms;
using ShareSpecial.Utils.Controls;
using ShareSpecial.Droid.Custom.Control.Buttons;
using Android.Content.Res;
[assembly: ExportRendererAttribute(typeof(SuccessButton), typeof(SuccessButtonRenderer))]
namespace ShareSpecial.Droid.Custom.Control.Buttons
{
public class SuccessButtonRenderer : Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer
{
public SuccessButtonRenderer() { }
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> changeEvent)
{
base.OnElementChanged(changeEvent);
var backgroundColor = Color.FromHex("43ac6a");
int num = backgroundColor.ToAndroid().ToArgb();
int num2 = backgroundColor.MultiplyAlpha(0.5).ToAndroid().ToArgb();
Control.SupportBackgroundTintList = new ColorStateList(ColorExtensions.States, new int[] { num, num2 });
Control.SetTextColor(Color.FromHex("#ffffff").ToAndroid());
}
}
}