gpt4 book ai didi

c# - Xamarin.Forms - 按钮按下和释放事件

转载 作者:可可西里 更新时间:2023-11-01 08:15:28 25 4
gpt4 key购买 nike

我想在按钮按下和释放时触发我的事件,但我只能在 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建议的解决方案。我们开始...

  1. 在 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);
    }
    }
  2. 在各自的项目中创建平台特定的按钮渲染器

    对于安卓

    [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();
    };
    }
    }
    }
  3. 在您的页面中实例化您的自定义按钮

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com