0

Windows Phone Silverlight 8.1 アプリにボタンがあります。2 つのイベント 1 つのクリック イベントと 2 番目のホールド イベントを作成しました。ユーザーがそのようなボタンを押したときにクリック イベントが発生しないようにしたいのですが、現在、ボタンを押したままにし、そのボタンをクリックしたままにすると、ボタンもクリックされます。火がついたので、それを処理する方法。

 private void ExtraButton_Click(object sender, RoutedEventArgs e)
 {

 }

 private void ExtraButton_Hold(object sender, GestureEventArgs e)
 {

 }

ホールドイベント実行時にクリックイベントをキャンセルする方法。

4

3 に答える 3

1

保持中にボタンクリックイベントを配線解除し、PointerExitedイベントでクリックイベントを再度配線することで、要件を達成できます。以下のコード スニペットを参照してください。

Button btn = new Button();

btn.Holding += Btn_Holding;

btn.Click += Btn_Click;

btn.PointerExited += Btn_PointerExited;


        private void Btn_PointerExited(object sender, PointerRoutedEventArgs e)
        {
            btn.Click += Btn_Click;
        }

        private void Btn_Click(object sender, RoutedEventArgs e)
        {

        }

        private void Btn_Holding(object sender, HoldingRoutedEventArgs e)
        {
            btn.Click -= Btn_Click;
        }

PointerExited イベントでは、いくつかの条件を使用してまだフックされていない場合にのみ、クリック イベントをフックできます。パフォーマンスが向上します。

于 2016-12-10T14:53:25.057 に答える
1

Button ClickイベントをButton Tapイベントに置き換えることをお勧めします。これは、このボタンを押したままにすると、最初にButton Holdイベントがトリガーされるためです。

        private void button1_Hold(object sender, System.Windows.Input.GestureEventArgs e)
    {
        e.Handled = true;  
        MessageBox.Show("button have been holded");

    }

    private void button1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        MessageBox.Show("button have been tapped");
        //your code goes here
    }

Handled プロパティを true に設定すると、Button Click イベントはジェスチャを処理しません。

于 2016-12-16T10:22:34.577 に答える