Xamarin在自定义渲染器中获取本机控件

时间:2018-08-26 08:09:26

标签: xaml xamarin xamarin.forms custom-renderer

我有两个自定义视图(HybridEntry和HybridSlider),每个平台都有自定义渲染器。在自定义渲染器中,HybridSlider必须使用HybridEntry的某些特定于平台的功能。

简而言之,我想在HybridSlider的自定义渲染器中访问HybridEntry的本机控件。

通过在HybridSlider类内部声明一个名为HybridEntry的属性,我可以将Forms HybridEntry的引用传递给xaml中的Forms HybridSlider类。

XAML:

<local:HybridEntry x:Name="hybridEntry"></local:HybridEntry>
<local:HybridSlider HybridEntry="{x:Reference hybridEntry}"></local:HybridSlider>

UWP中HybridSlider的自定义渲染器-

using Windows.UI.Xaml.Controls;
using Xamarin.Forms.Platform.UWP;

[assembly: ExportRenderer(handler: typeof(Core.CustomView.HybridSlider), target: typeof(Demo.UWP.Renderers.HybridSliderwRenderer))]
namespace Demo.UWP.Renderers
{
    public class HybridSliderwRenderer : ViewRenderer<Core.CustomView.HybridSlider, UserControl>
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Core.CustomView.HybridSlider> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var formsHybridEntry = e.NewElement.HybridEntry;

                Demo.UWP.HybridEntry uwpEntry= (Demo.UWP.HybridEntry)formsHybridEntry; // I WANT TO GET THE NATIVE control here
            }
        }
    }
}

如何在HybridSlider的自定义渲染器内部访问与HybridEntry类关联的本机控件类?

1 个答案:

答案 0 :(得分:0)

此博客文章着重于获取共享控件的本机控件。

http://michaelridland.com/xamarin/creating-native-view-xamarin-forms-viewpage/

对于UWP,它非常相似,可以肯定地研究RendererFactory.GetRenderer (view)方法。但是它可能已经过时了。如果是这样,您将在网络上找到最新的方法。