如何实现 Xamarin.Forms 自定义 RadioButton 渲染器? (转发)
How to implement Xamarin.Forms custom RadioButton renderer? (repost)
注意:几天前我最初 post 编辑了它,但由于 insufficient/unclear 细节而被关闭。希望这次 repost 能通过考试
我正在使用 Xamarin.Forms 创建一个 Android/iOS 应用程序。
我发现选定的 RadioButtons 在 Android:
上呈现为红色
我想在我的应用主题中使用不同的颜色。
我找到了一个 Xamarin 论坛 post,它描述了这方面的标准机制,即通过在 Android 项目中添加以下代码 来实现自定义渲染器:
[assembly: ExportRenderer(typeof(Xamarin.Forms.RadioButton), typeof(MyRenderer))]
namespace MyApp.Droid
{
public class MyRenderer : RadioButtonRenderer
{
public MyRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
if(Control != null)
{
Control.ButtonTintList = ColorStateList.ValueOf(Android.Graphics.Color.Yellow);
}
}
}
}
我已经添加了代码(渲染器在我的 Android 项目中);它编译、运行(在 Android 上)、按钮出现和运行等
但是,MyRenderer() 和 OnElementChanged() 都没有被调用。
是否需要额外的东西才能使应用程序使用自定义渲染器?
谢谢!
答案是自定义渲染器似乎只适用于 自定义 classes.
因此,为了使其正常工作,您 必须 定义您自己的自定义 class 并 将渲染器附加到您的 class .当我应该引用我的类型时,我引用了 Xamarin.Forms.RadioButton。
不有效吗:
ExportRenderer(typeof(Xamarin.Forms.RadioButton), ...
是否有效:
ExportRenderer(typeof(MyApp.MyRadio), ...
因此,最小的工作实施是在您的主项目中创建您的自定义 class(Android 或 iOS 具体):
namespace MyApp
{
// All that's needed is the simplest derived class ever:
public class MyRadio : RadioButton
{
}
}
然后在您的 Android 项目中:
[assembly: ExportRenderer(typeof(MyApp.MyRadio), typeof(MyApp.Droid.MyRenderer))]
namespace MyApp.Droid
{
... same as the code in the question above
}
注意:几天前我最初 post 编辑了它,但由于 insufficient/unclear 细节而被关闭。希望这次 repost 能通过考试
我正在使用 Xamarin.Forms 创建一个 Android/iOS 应用程序。
我发现选定的 RadioButtons 在 Android:
上呈现为红色
我想在我的应用主题中使用不同的颜色。
我找到了一个 Xamarin 论坛 post,它描述了这方面的标准机制,即通过在 Android 项目中添加以下代码 来实现自定义渲染器:
[assembly: ExportRenderer(typeof(Xamarin.Forms.RadioButton), typeof(MyRenderer))]
namespace MyApp.Droid
{
public class MyRenderer : RadioButtonRenderer
{
public MyRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
{
base.OnElementChanged(e);
if(Control != null)
{
Control.ButtonTintList = ColorStateList.ValueOf(Android.Graphics.Color.Yellow);
}
}
}
}
我已经添加了代码(渲染器在我的 Android 项目中);它编译、运行(在 Android 上)、按钮出现和运行等
但是,MyRenderer() 和 OnElementChanged() 都没有被调用。
是否需要额外的东西才能使应用程序使用自定义渲染器?
谢谢!
答案是自定义渲染器似乎只适用于 自定义 classes.
因此,为了使其正常工作,您 必须 定义您自己的自定义 class 并 将渲染器附加到您的 class .当我应该引用我的类型时,我引用了 Xamarin.Forms.RadioButton。
不有效吗:
ExportRenderer(typeof(Xamarin.Forms.RadioButton), ...
是否有效:
ExportRenderer(typeof(MyApp.MyRadio), ...
因此,最小的工作实施是在您的主项目中创建您的自定义 class(Android 或 iOS 具体):
namespace MyApp
{
// All that's needed is the simplest derived class ever:
public class MyRadio : RadioButton
{
}
}
然后在您的 Android 项目中:
[assembly: ExportRenderer(typeof(MyApp.MyRadio), typeof(MyApp.Droid.MyRenderer))]
namespace MyApp.Droid
{
... same as the code in the question above
}