2017-03-17 83 views
0

工作在Xamarin.Forms,在PCL,我有自定义控制,自定义事件:自定义事件处理程序中Xamarin.Forms不会在XAML

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); 
    } 
} 
在我的起始页

我:

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发现

我的问题是:为什么?有什么区别?

+2

的OnTapped你在代码中声明的是不是一个*物业* - 它没有一个getter/setter方法。这只是课堂级别的变量。 – Jason

+0

添加getter和setter并使其成为属性无效:/ –

回答

1

OnTapped必须是一个事件:

public event EventHandler OnTapped; 
+0

工作!谢谢! –

相关问题