【问题标题】:Custom EventHandler in Xamarin.Forms doesn't work in xamlXamarin.Forms 中的自定义 EventHandler 在 xaml 中不起作用
【发布时间】: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


【解决方案1】:

OnTapped 必须是一个事件:

public event EventHandler OnTapped;

【讨论】:

  • 成功了!谢谢!
猜你喜欢
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2019-12-10
  • 2022-01-14
相关资源
最近更新 更多