如何使用CustomRenderer呈现不同的组件

时间:2018-03-29 17:03:48

标签: c# xamarin.forms xamarin.ios

我有一个示例Xamarin.Forms共享项目,我有一个MainPage.xaml。为了在iOS上实现材料设计外观,我正在尝试使用自定义渲染器为组件提供所需的外观。最近我发现了Xamarin.iOS的一些依赖项,可以做到这一点。

我想知道我需要做什么才能使用CustomRenderer从Xamarin.iOS依赖项中呈现一个组件。

这是我的iOS自定义渲染器:

[assembly: ExportRenderer (typeof(CustomEntry), typeof(CustomEntryRenderer))]
namespace MCTest.iOS
{
    public class CustomEntryRenderer : EntryRenderer
    {

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                // do whatever
            }
        }
    }
}

在这里我可以自定义条目,但真正想做的是从外部(nuget)依赖项渲染不同的组件。这可能吗 ?如果是这样,我怎么能做到这一点?感谢。

1 个答案:

答案 0 :(得分:2)

您可以尝试在PCL中创建一个ContentPage,然后将其渲染器设为:

[assembly: ExportRenderer(typeof(MaterialPage), typeof(MaterialPageRenderer))]
namespace SpecialPageRenderer.iOS
{
    public class MaterialPageRenderer : PageRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (Element != null)
            {
                var materialView = UIStoryboard.FromName("Main", null).InstantiateViewController("ViewController").View;

                NativeView.AddSubview(materialView);
            }
        }
    }   
}

在这里,我在名为ViewController的iOS项目上创建一个新的MaterialViewController。然后我可以在此渲染器中构建它,在NativeView上添加其视图。最后,依赖控件将显示。

我为您提供了一个示例:https://github.com/landl0526/SpecialMaterialPage