CustomRenderer不适用

时间:2018-06-22 21:12:22

标签: xamarin xamarin.forms xamarin.android custom-renderer

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似乎一开始就无法工作的想法)。

1 个答案:

答案 0 :(得分:0)

正如您提到“两个项目”一样,答案似乎很明显:项目A的渲染器未应用于项目B。您可以选择将其移至适当的项目或将其移至共享项目https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/shared-projects?tabs=vswin