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

Joe*_*ung 2 c# wpf xaml xamarin

我在Xamarin表单上制作自定义图像按钮.但是我的代码下面没有用.

运行时错误消息:

Position 26:34. Cannot assign property "buttonCallback": type mismatch between "System.String" and "XXX.CircleImageButton+ClickedDelegate"
Run Code Online (Sandbox Code Playgroud)

从xaml传递回调方法的正确方法是什么?你怎么称呼这种技术?

谢谢.

myxaml.xaml

<local:CircleImageButton buttonCallback="buttonCallback"...
Run Code Online (Sandbox Code Playgroud)

myxaml.xaml.cs

void buttonCallback()
{
...
}
Run Code Online (Sandbox Code Playgroud)

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();
                })
            });     
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sve*_*übe 5

只需将您的代码更改为:

public event ClickedDelegate buttonCallback;
Run Code Online (Sandbox Code Playgroud)

建议

对于自定义事件,我将使用此结构:

MyBarElement

Decalaration

public event EventHandler FooHappend;
Run Code Online (Sandbox Code Playgroud)

调用

FooHappend?.Invoke(this, EventArgs.Empty);
Run Code Online (Sandbox Code Playgroud)

然后你可以使用

<MyBarElement FooHappend="OnFooHappend"></MyBarElement>
Run Code Online (Sandbox Code Playgroud)

在你的代码背后

private void OnFooHappend(object sender, EventArgs eventArgs)
{

}
Run Code Online (Sandbox Code Playgroud)