Xamarin.Forms - 可以使用原始元素名称编写自定义渲染器吗?

时间:2017-07-28 13:42:03

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

在Xamarin.Forms中,我通常会使用类似" ButtonExt"等类名为按钮编写自定义渲染器。是否可以使用原始名称(我猜覆盖)元素来编写自定义渲染器,例如" Button"?

基本上,我希望能够为我的应用中的所有按钮添加水平填充,但无需将所有Button重命名为ButtonExt(Xamarin中的按钮没有Padding属性。形式)。换句话说,我希望能够说new Button { Padding = 20 }而不必说new ButtonExt { Padding = 20 }(项目是C#,而不是XAML)。

通常,在iOS项目中,我有:

[assembly: ExportRenderer(typeof(ButtonExt), typeof(ButtonExtRenderer))]
namespace StoreFulfillment.iOS
{
    public class ButtonExtRenderer : ButtonRenderer

在共享项目中,我有:

using MySharedProject;
using Xamarin.Forms;

namespace MySharedProject.Renderers
{
    public class ButtonExt : Button
    {
        ...

然后我说new ButtonExt { Padding = 20 }。但是为了能够写new Button { Padding = 20 },我无法写public class Button : Button ...所以我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

当然!只需将其注册为普通Button类型,并确保调用您覆盖的所有基本方法,以便原始工作也保持不变。

因此,注册渲染器的属性将如下所示:

[assembly: ExportRenderer(typeof(Button), typeof(YourButtonRenderer))]

此外,请确保您确实需要自定义渲染器。如果您只想要一个简单的样式问题,请查看Xamarin.Forms styling possibilities,尤其是隐式样式。