c# - Xamarin.Forms-बटन दबाया और जारी घटना




events cross-platform (2)

मैं बटन दबाया और जारी होने पर ट्रिगर करने के लिए मेरी घटना चाहता हूं, लेकिन मैं केवल Xamarin में क्लिक ईवेंट को ढूंढ सकता हूं। प्रारूप

मेरा मानना ​​है कि इस कार्यशीलता को पाने के लिए कुछ काम होना चाहिए। मेरी मूलभूत आवश्यकता प्रक्रिया शुरू करने के लिए होती है जब बटन दबाया जाता है और जारी होने पर रोकें । यह एक बहुत ही बुनियादी सुविधा है, लेकिन ज़ामारीन लगता है.फॉर्मों में यह अभी नहीं है।

मैंने बटन पर टॉग गैस्ट्रररेक्जरीकर्ता की कोशिश की, लेकिन बटन केवल ईवेंट पर क्लिक करने की तैयारी कर रहा है।

MyButton.Clicked += (sender, args) =>
{
  Log.V(TAG, "CLICKED");
};

var tapGestureRecognizer = new TapGestureRecognizer();
tapGestureRecognizer.Tapped += (s, e) => {
    Log.V(TAG, "TAPPED");
};
MyButton.GestureRecognizers.Add(tapGestureRecognizer);

ध्यान रखें कि मुझे एंड्रॉइड और आईओएस टूगदर में काम करने की उन घटनाओं की ज़रूरत है


अंत में मुझे @ जेसन द्वारा सुझाए गए समाधान मिल गया ये रहा...

  1. पीसीएल प्रोजेक्ट में एक्सरामिना फ़ार्म। बटन का उप-वर्ग बनाएँ, ईवेंट हैंडलिंग क्षमता के साथ

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

    आईओएस के लिए

    [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");
    };

उम्मीद है कि यह कोई मदद :)


Button button = FindViewById (Resource.Id.myButton);
button.Touch += (object sender, View.TouchEventArgs e) =>
{
if (e.Event.Action == MotionEventActions.Up)
{
Toast.MakeText(this, "Key Up", ToastLength.Short).Show();
}
        if(e.Event.Action == MotionEventActions.Down)
        {
            Toast.MakeText(this, "Key Down", ToastLength.Short).Show();
        }
    };




xamarin.forms