我想在按钮按下和释放时触发我的事件,但我只能在 Xamarin.Forms 中找到Click 事件。
我相信必须有一些解决方法才能获得此功能。我的基本需求是在按下按钮时启动进程,在释放按钮时停止。这似乎是一个非常基本的功能,但 Xamarin.Forms 目前没有。
我在按钮上尝试了 TapGestureRecognizer,但按钮仅触发点击事件。
MyButton.Clicked += (sender, args) =>
{
Log.V(TAG, "CLICKED");
};
var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
Log.V(TAG, "TAPPED");
};
MyButton.GestureRecognizers.Add(tapGestureRecognizer);
请记住,我需要这些事件在 Android 和 iOS 中一起工作。
最佳答案
最后我得到了@Jason建议的解决方案。我们开始...
在 PCL 项目中使用事件创建 Xamarin.Forms.Button 的子类 处理能力
public class CustomButton : Button { public event EventHandler Pressed; public event EventHandler Released; public virtual void OnPressed() { Pressed?.Invoke(this, EventArgs.Empty); } public virtual void OnReleased() { Released?.Invoke(this, EventArgs.Empty); } }
在各自的项目中创建平台特定的按钮渲染器
对于安卓
[assembly: ExportRenderer(typeof(Button), typeof(CustomButtonRenderer))] namespace WalkieTalkie.Droid.Renderer { public class CustomButtonRenderer : ButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e) { base.OnElementChanged(e); var customButton = e.NewElement as CustomButton; var thisButton = Control as Android.Widget.Button; thisButton.Touch += (object sender, TouchEventArgs args) => { if (args.Event.Action == MotionEventActions.Down) { customButton.OnPressed(); } else if (args.Event.Action == MotionEventActions.Up) { customButton.OnReleased(); } }; } } }
iOS 版
[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))] namespace WalkieTalkie.iOS.Renderer { public class CustomButtonRenderer : ButtonRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e) { base.OnElementChanged(e); var customButton = e.NewElement as CustomButton; var thisButton = Control as UIButton; thisButton.TouchDown += delegate { customButton.OnPressed(); }; thisButton.TouchUpInside += delegate { customButton.OnReleased(); }; } } }
在您的页面中实例化您的自定义按钮
var myButton = new CustomButton { Text = "CustomButton", HorizontalOptions = LayoutOptions.FillAndExpand }; myButton.Pressed += (sender, args) => { System.Diagnostics.Debug.WriteLine("Pressed"); }; myButton.Released += (sender, args) => { System.Diagnostics.Debug.WriteLine("Pressed"); };
希望这对某人有帮助:)
关于c# - Xamarin.Forms - 按钮按下和释放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803157/