【问题标题】:Xamarin.Forms: Is there an event to indicate that Custom Renderer has executed?Xamarin.Forms:是否有事件表明自定义渲染器已执行?
【发布时间】:2019-07-11 09:47:06
【问题描述】:

我正在尝试解决使用自定义渲染器的开源 Xamarin.Forms 控件中的一个缺点。

问题是我只能在自定义渲染器运行之后在控件上设置某些属性。我只是不确定那会是什么时候。控件或页面中是否有任何生命周期事件表明所有自定义渲染器都已执行?

谢谢!

【问题讨论】:

    标签: xamarin.forms custom-renderer


    【解决方案1】:

    xxxRenderer 类公开了 OnElementChanged 方法,该方法在创建 Xamarin.Forms 控件时调用以呈现相应的本机控件。此方法采用包含OldElementNewElement 属性的ElementChangedEventArgs 参数。这些属性表示渲染器附加到的 Xamarin.Forms 元素,以及渲染器附加到的 Xamarin.Forms 元素。

    protected override void OnElementChanged (ElementChangedEventArgs<Entry> e)
    {
      base.OnElementChanged (e);
    
      if (Control != null) {
         // custom renderers have executed here
    
      }
    }
    

    对基类的 OnElementChanged 方法的调用会实例化本机控件(或视图),其中对分配给呈现器的 Control 属性的控件的引用。

    【讨论】:

    • 感谢您的回复。不幸的是,我并不“拥有”渲染器本身。如果可能的话,我真的很想避免分叉源代码来进行自定义。当我知道自定义渲染器已执行时,Xamarin.Forms 项目中是否有任何意义?
    • 我们无法知道自定义渲染器是否已在表单中执行。如果您不想“分叉源代码以进行自定义”,为什么还要使用自定义渲染器?我们使用它是因为我们想在特定平台上做一些特殊的事情。
    • 如果你想知道,你可以使用messagingCenter。并在OnElementChanged 发送通知并在表单中订阅。
    • 不幸的是,MessagingCenter 似乎也无法正常工作。我正在查看的文件是github.com/xamarin/SignaturePad/blob/master/src/… OnElementChanged 从第50 行 开始,它立即调用触发事件的base.OnElementChanged。但我需要在 line 89 执行后知道某个点。如果没有该行,我将无法从 Xamarin Forms 为 SignaturePad 设置笔画。
    • 如果你不能编辑渲染器,我认为你不能实现它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 2017-02-10
    • 2017-01-07
    • 1970-01-01
    • 2014-08-29
    • 2016-05-31
    • 1970-01-01
    相关资源
    最近更新 更多