我创建了一个自定义控件。 它由一个放置按钮的网格组成:
using Xamarin.Forms;
namespace MyApp
{
public class clsButton : ContentView
{
private Grid _grid;
private Button _button;
public clsButton()
{
_grid = new Grid
{
Margin = new Thickness(0),
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
};
_grid.BindingContext = this;
_button = new Button()
{
};
_button.Clicked += async (sender, e) =>
{
//I tried different things here, but none gave me the right results. I need to "bubble" this click to the outside
return;
};
_grid.Children.Add(_button, 0, 0);
this.Content = _grid;
}
}
}
我在ContentPage中创建了一些这样的自定义控件,如下所示:
_MyButton = new clsImageButton()
{
};
var nTapGestureRecognizer = new TapGestureRecognizer();
nTapGestureRecognizer.Tapped += OnButtonClicked;
_MyButton.GestureRecognizers.Add(nTapGestureRecognizer);
这是同一个ContentPage中的空白:
async void OnButtonClicked(object sender,EventArgs e)
{
//I don't managed to get here
}
这不起作用。 永远不会调用“OnButtonClicked”。
我想我必须在自定义控件中引发一个事件。 我试了一些东西,但没有一个成功。
我该如何正确地做到这一点?
答案 0 :(得分:3)
在您的clsButton
中,宣布公开活动
public EventHandler ButtonClicked { get; set; }
然后在点击按钮时提升事件
_button.Clicked += async (sender, e) =>
{
if (ButtonClicked != null) ButtonClicked(this,e);
};
最后,无论您使用clsButton
,您都可以订阅该事件(不需要手势识别器)
var btn = new clsButton();
btn.ButtonClicked += async (sender, e) => {
// respond here
}