Xamarin窗体事件冒泡和调用操作的自定义渲染器
本文关键字:自定义 操作 调用 事件 窗体 Xamarin | 更新日期: 2023-09-27 18:07:14
我正在创建一个自定义Xamarin Forms控件,该控件在视图中包含三个按钮(1,2,3)。在这个例子中我们就叫它GaugeView
吧。下面是当前的设置:
-
GuageView
在iOS和Android上都有一个自定义渲染器GuageViewRenderer
。 -
GuageView
公开Clicked1
、Clicked2
和Clicked3
的事件处理程序。 -
GuageView
显示Click1
、Click2
和Click3
的ICommand
属性。
问题是,我需要从自定义呈现器中触发事件处理程序,因为只有本地平台控件知道其中一个按钮何时被按下。您如何将事件返回到共享代码所在的GuageView
?
我计划在自定义渲染器内连接命令和事件处理程序,但我有一个时间与它,因为事件只能从原始类(GuageView
)内触发。
是否有更好的方法来构建这个?我试图做的主要事情是公开平台本地语言并将其按钮连接起来,以便共享代码(GuageView
)中的事件处理程序获得事件触发。
是的,你不能在声明它们的类之外引发事件。因此,您必须向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