1

ボタン 1 がスタイラス テスト メソッドによってタップされると、stylusdown イベントで Handled プロパティを設定しているにもかかわらず、2 回呼び出されます。スタイラス イベントがセカンダリ ボタン クリック イベントを伝播しないようにする方法はありますか?

namespace DialogTest
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            test(sender, e);
        }

        private void button1_StylusDown(object sender, StylusDownEventArgs e)
        {
            test(sender, e);
            e.Handled = true;
        }

        private void test(object e, EventArgs env)
        {
            Console.WriteLine(e.ToString(), env.ToString());

            Console.WriteLine("clicking");
        }


    }
4

2 に答える 2

1

このMSDN入力の概要ドキュメントを見ると。両方のイベントが呼び出されていることがわかります。

上記のリンクから:

スタイラスはマウスとして機能できるため、マウス入力のみをサポートするアプリケーションでも、ある程度のスタイラス サポートを自動的に取得できます。スタイラスがこのような方法で使用されると、アプリケーションは適切なスタイラス イベントを処理する機会を与えられ、次に対応するマウス イベントを処理します。さらに、インク入力などのより高度なサービスも、スタイラス デバイスの抽象化を通じて利用できます。

イベントが呼び出される順序を提供するため、ブール変数を作成して に設定し、true であるかどうかStylusDown EventHandlerをチェックインし、 false に設定してからハンドラを終了します。Button_Click EventHandler

このようなもの。

public partial class Window1 : Window
{
    bool StylusDown;
    public Window1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        if(StylusDown)
        {
            StylusDown=false;
            return;
        }

        test(sender, e);
    }

    private void button1_StylusDown(object sender, StylusDownEventArgs e)
    {
        StylusDown =true;
        test(sender, e);
    }

    private void test(object e, EventArgs env)
    {
        Console.WriteLine(e.ToString(), env.ToString());

        Console.WriteLine("clicking");
    }


}

これを達成するためのより良い方法があるかもしれませんが、これが最初に頭に浮かんだことでした。

于 2013-06-28T01:31:38.907 に答える
1

MouseEventArgs には StylusDevice というプロパティがあり、イベントがスタイラスまたはタッチ イベントから発生した場合は null にはなりません。

private void button1_Click(object sender, MouseButtonEventArgs e)
{
    if (e.StylusDevice != null) return;
    ...
}
于 2015-03-26T19:55:55.233 に答える