2

Win 8に移植しようとしているWindows Phoneマーケットプレイスで公開されたアプリがあります。Windows 8 Release PreviewVisual Studio Express RC 2012 for Win 8を使用しています。コードはC#-XAML.

カスタムの 6x7 カレンダーを作成しました。最初の 7 つのボタンは最初の に配置され、次の 7 つのボタンはStackPanel別のパネルに配置されます。したがって、StackPanels42個のボタンを保持する6つがあります。これらのすべての StackPanels はGrid、簡単に配置できるように配置されています。

Holdingすべてのボタンは、 OnLongPress という名前の EventHandler に関連付けられています。私が直面している問題は、ボタンが押されたときに OnLongPress 関数が 2 回呼び出されることです。デバッグ時に、初めてそれHolding stateStarted呼び出され、次に呼び出されたときにHolding stateidであることがわかりましたCompleted。なぜ2回呼び出されているのかわかりません。

イベントがバブバブしているからでしょうか??:(

    private void OnLongPress(object sender, HoldingRoutedEventArgs e)
    {

            Button butClicked = (Button)sender;
            int iNumClicked = Convert.ToInt32(butClicked.Content.ToString());

            CycleManager pCycMan = CycleManager.Instance;

            string iVal, jVal;
            int iRow, jCol;
            string butName = butClicked.Name;
            iVal = butName.Substring(1, 1);
            jVal = butName.Substring(2, 1);
            iRow = Convert.ToInt32(iVal);
            jCol = Convert.ToInt32(jVal);

            DateTime dtSelDate = new DateTime(m_yearBuffer[iRow, jCol], m_monthBuffer[iRow, jCol], iNumClicked);

            int trackingStatus = pCycMan.IsDateOkForHistory(dtSelDate);
            // setting or resetting few colors based on few checks
    }

私はWin 8開発に慣れていないので、誰かが光を当てることができれば助かります。

4

2 に答える 2

6

次のチェックを含めることで、処理状態の開始時と完了時に 1 回、2 回呼び出されるイベントを保持する問題を解決しました。それが正しい方法かどうかはまだわかりません。

if (e.HoldingState == Windows.UI.Input.HoldingState.Started)
于 2012-06-07T12:47:36.100 に答える
1

保留状態が完了またはキャンセルされたときにイベントを 1 回だけ発生させたい場合は、 を使用してみてくださいRightTapped

保留は情報 UI を目的としていますが、RightTapped代わりに使用する必要があるコンテキスト メニューの表示などの操作を目的としています。最初に Holding を処理して、メニューが表示されるというヒントを表示することもできますが、メニュー自体を表示するには、RightTappedハンドラーを使用します。アプリの設計でホールド インタラクションを使用する方法の詳細については、「タッチ インタラクションの設計」または「一般的なユーザー インタラクションのガイドライン」を参照してください。

http://msdn.microsoft.com/en-us/library/windows.ui.xaml.uielement.holding.aspx

RightTappedタッチ アクションは、一定時間 1 つの場所にとどまるアクションを処理した結果です。タッチ アクションの場合、同じ要素からの Holding イベントが常に先行しますがRightTapped、タッチ ポイントが離されるまで発生しません。ポインターを押している時間が短すぎて、Holding の代わりに Tapped が発火した場合、または Hold アクションがHoldingStateCanceled で終了した場合RightTappedは発火しません。

于 2014-12-14T00:48:11.473 に答える