Xamarin.Forms.Buttons上的BackgroundColor属性开始为分配给按钮的整个区域着色,而不仅仅是为按钮着色,因此我开始研究Android中的Custom Renderers,看看是否可以修复它。以下是我创建的类,使用自定义按钮的.xaml和渲染器(应该将按钮涂成绿色作为测试):
using Xamarin.Forms;
namespace wcsmobile
{
public class wcsButton : Button
{
}
}
<?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:local="clr-namespace:wcsmobile;assembly=wcsmobile"
x:Class="wcsmobile.Transfer"
Title="Transfer">
<ContentPage.Content>
<StackLayout HorizontalOptions="FillAndExpand">
<local:wcsButton Text="OK" HorizontalOptions="Center"/>
</StackLayout>
</ContentPage.Content>
</ContentPage>
[assembly: ExportRenderer(typeof(wcsButton), typeof(ButtonRenderer))]
namespace wcsmobile.Droid
{
class wcsButtonRenderer : ButtonRenderer
{
public wcsButtonRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.SetBackgroundColor(global::Android.Graphics.Color.LightGreen);
}
}
}
}
没有错误,但是按钮保持灰色,而不是绿色。在“ base.OnElementChanged(e)”上放置一个断点不会做任何事情;断点永远不会被击中。两个项目都使用Xamarin.Forms版本3.1.0.583944。
任何了解为何自定义渲染器似乎未应用的线索都将非常有帮助。 (甚至是关于为什么BackgroundColor似乎一开始就无法工作的想法)。
答案 0 :(得分:0)
正如您提到“两个项目”一样,答案似乎很明显:项目A的渲染器未应用于项目B。您可以选择将其移至适当的项目或将其移至共享项目https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/shared-projects?tabs=vswin