【发布时间】:2017-03-17 03:15:30
【问题描述】:
在Xamarin.Forms,在 PCL 中,我有自定义控件,带有自定义事件:
public class TestGrid : Grid
{
public EventHandler OnTapped;
public TestGrid()
{
var tgr = new TapGestureRecognizer { NumberOfTapsRequired = 1 };
tgr.Tapped += Tgr_Tapped;
this.GestureRecognizers.Add(tgr);
}
private void Tgr_Tapped(object sender, EventArgs e)
{
OnTapped?.Invoke(sender, e);
}
}
在我的 StartPage 我有:
public partial class StartPage : ContentPage
{
public StartPage()
{
InitializeComponent();
BindingContext = new StartPageViewModel();
MainGrid.OnTapped += OnGridTapped;
}
private void OnGridTapped(object sender, EventArgs e)
{
Debug.WriteLine("Tapped!");
}
}
我的 XAML 看起来像这样,并且可以正常工作:
<v:TestGrid x:Name="MainGrid" />
但是!
当我删除MainGrid.OnTapped += OnGridTapped;
并在 xaml 中添加事件,这里:
<v:TestGrid x:Name="MainGrid" OnTapped="OnGridTapped">
我不工作。它说.. OnTapped 事件未找到:
未处理的异常:
Xamarin.Forms.Xaml.XamlParseException:位置 6:33。没有财产 找到名称 OnTapped
我的问题是:为什么?有什么区别?
【问题讨论】:
-
您在代码中声明的 OnTapped 不是 property - 它没有 getter/setter。它只是类级别的变量。
-
添加 getter 和 setter 并使其成为属性不起作用:/
标签: c# xamarin xamarin.ios xamarin.android xamarin.forms