2017-12-01 18 views
0

私はカスタムコントロールを作成しました。私はこのようなContentPageでこれらのカスタムコントロールの一部を作成外部からグリッドイベントのイベントボタンを受信

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; 
     } 
    } 
} 

_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"は決して呼び出されません。

私はカスタムコントロール内からイベントを発生させる必要があると思います。 私はいくつかのことを試みましたが、どれも成功しませんでした。

これを正しく行うにはどうすればよいですか?あなたのclsButton

答えて

3

、あなたのボタンはあなたがclsButtonを使用しているこれまで、あなたがイベントを購読することができ、最終的

 _button.Clicked += async (sender, e) => 
     { 
      if (ButtonClicked != null) ButtonClicked(this,e); 
     }; 

を、クリックされたときにイベントを発生させ、その後

public EventHandler ButtonClicked { get; set; } 

公開イベントを宣言(ジェスチャ認識機能は不要です)

var btn = new clsButton(); 
btn.ButtonClicked += async (sender, e) => { 
    // respond here 
} 
+0

ありがとうございます。エラーが表示されます。 "clsButton.ButtonClicked:イベントプロパティにアクセサの追加と削除が必要です。"おそらく "public EventHandler ButtonClicked {get; set;}"を意味しますか? – tmighty

+0

私はそれを改善することができました。 :-)クラス内: public EventHandler ButtonClicked; _button.Clicked + = async(sender、e)=> { ButtonClicked ?Invoke(sender、e); };外 : _button.ButtonClicked + =非同期(送信者、E)=> { // Debug.Assertの(偽)ここで応えます。 };それに応じてあなたの返事を変更してくださいできますか? – tmighty

+0

"{get; set;}"を削除する必要があると思います。少なくとも私のためにはそれで動作しません。 – tmighty

関連する問題