Xamarin窗体事件冒泡和调用操作的自定义渲染器

本文关键字:自定义 操作 调用 事件 窗体 Xamarin | 更新日期: 2023-09-27 18:07:14

我正在创建一个自定义Xamarin Forms控件,该控件在视图中包含三个按钮(1,2,3)。在这个例子中我们就叫它GaugeView吧。下面是当前的设置:

  • GuageView在iOS和Android上都有一个自定义渲染器GuageViewRenderer
  • GuageView公开Clicked1Clicked2Clicked3的事件处理程序。
  • GuageView显示Click1Click2Click3ICommand属性。

问题是,我需要从自定义呈现器中触发事件处理程序,因为只有本地平台控件知道其中一个按钮何时被按下。您如何将事件返回到共享代码所在的GuageView ?

我计划在自定义渲染器内连接命令和事件处理程序,但我有一个时间与它,因为事件只能从原始类(GuageView)内触发。

是否有更好的方法来构建这个?我试图做的主要事情是公开平台本地语言并将其按钮连接起来,以便共享代码(GuageView)中的事件处理程序获得事件触发。

Xamarin窗体事件冒泡和调用操作的自定义渲染器

是的,你不能在声明它们的类之外引发事件。因此,您必须向GaugeView添加一个方法来引发事件。我也会用同样的方法调用命令。在GaugeView

public void RaiseClick1() {
    var clicked1 = Clicked1;
    if (clicked1 != null)
        clicked1(this, EventArgs.Empty);
    if (Command1 != null && Command1.CanExecute(Command1Paramter))
         Command1.Execute(Command1Parameter);
}

然后在GaugeViewRender中,当你需要通知视图按钮被点击时:

Element.RaiseClick1();

迟来的答案,但可能将来:您可以从外部使用IButtonController接口引发按钮的单击事件。

Xamarin.Forms.Button类实现了这个接口,它提供了一个方法:SendClicked

通过使用Xamarin。渲染器(this. element)中的Forms元素到IButtonController,你可以调用这个方法并引发Xamarin.Forms.Button的click事件。

我也写了一篇关于这个话题的博文:http://software.fauland.cc/?p=5637