如何从xaml传递回调方法? (Xamarin.form& WPF)

时间:2016-05-05 21:37:35

标签: c# wpf xaml xamarin

我在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();
                })
            });     
        }
    }
}

2 个答案:

答案 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; }
    }
}

希望这可以为某人节省一两个小时的时间:)