我在Xamarin表单上制作自定义图片按钮。 但是我的代码下面没有用。
运行时错误消息:
Position 26:34. Cannot assign property "buttonCallback": type mismatch between "System.String" and "XXX.CircleImageButton+ClickedDelegate"
从xaml传递回调方法的正确方法是什么? 你怎么称呼这种技术?
感谢。
myxaml.xaml
<local:CircleImageButton buttonCallback="buttonCallback"...
myxaml.xaml.cs
void buttonCallback()
{
...
}
CircleImageButton.cs
using System;
using ImageCircle.Forms.Plugin.Abstractions;
using Xamarin.Forms;
namespace XXX
{
public class CircleImageButton : CircleImage
{
public delegate void ClickedDelegate();
public ClickedDelegate buttonCallback { set; get; }
public CircleImageButton ()
{
this.GestureRecognizers.Add (new TapGestureRecognizer{
Command = new Command(() => {
this.Opacity = 0.6;
this.FadeTo(1);
this.buttonCallback();
})
});
}
}
}
答案 0 :(得分:5)
只需将您的代码更改为:
public event ClickedDelegate buttonCallback;
对于自定义事件,我使用此结构:
<强> MyBarElement 强>
颓势
public event EventHandler FooHappend;
调用
FooHappend?.Invoke(this, EventArgs.Empty);
网页强>
然后你可以使用
<MyBarElement FooHappend="OnFooHappend"></MyBarElement>
在您的代码中
private void OnFooHappend(object sender, EventArgs eventArgs)
{
}
答案 1 :(得分:0)
对 Sven 的回答进行简短补充(因为我还不能发表评论);如果您希望使用自定义 EventArgs 来传回自定义信息,您必须使用:
public event EventHandler<CustomEventArgs> FooHappend;
连同:
FooHappend?.Invoke(this, new CustomEventArgs(MyValue.ToString()));
和:
private void OnFooHappend(object sender, CustomEventArgs eventArgs)
{
}
您可以像这样轻松定义:
public class CustomEventArgs: EventArgs
{
private readonly string customString;
public CustomEventArgs(string customString)
{
this.customString= customString;
}
public string CustomString
{
get { return this.customString; }
}
}
希望这可以为某人节省一两个小时的时间:)