1

メトロ アプリケーション用の C# と XAML に取り組んでいます。テキストボックスがあり、そのテキストボックスでEnterキーを押すと、新しいテキストボックスが表示されます。しかし、1 つのテキスト ボックスではなく、2 つのテキスト ボックスが表示されます。デバッグも行いましたが、2回トリガーされていることに気付きました。2回トリガーされる理由を理解できません。ここに私のアプリケーションのコードがあります

private void TextBox_KeyDown_1(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
    {
        if (e.Key == Windows.System.VirtualKey.Enter)
        {
          //code for producing textbox
        }

    }

デバッグ時に、上記のブロックが実行されると、LayoutAwarePage.cs に移動し、コントロールがこのコード スニペットに送信されます。

private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender,
        AcceleratorKeyEventArgs args)
    {
        var virtualKey = args.VirtualKey;

       if ((args.EventType == CoreAcceleratorKeyEventType.SystemKeyDown ||
            args.EventType == CoreAcceleratorKeyEventType.KeyDown) &&
            (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right ||
            (int)virtualKey == 166 || (int)virtualKey == 167))
        {
            var coreWindow = Window.Current.CoreWindow;
            var downState = CoreVirtualKeyStates.Down;
            bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState;
            bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState;
            bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState;
            bool noModifiers = !menuKey && !controlKey && !shiftKey;
            bool onlyAlt = menuKey && !controlKey && !shiftKey;

            if (((int)virtualKey == 166 && noModifiers) ||
                (virtualKey == VirtualKey.Left && onlyAlt))
            {
                // When the previous key or Alt+Left are pressed navigate back
                args.Handled = true;
                this.GoBack(this, new RoutedEventArgs());
            }
            else if (((int)virtualKey == 167 && noModifiers) ||
                (virtualKey == VirtualKey.Right && onlyAlt))
            {
                // When the next key or Alt+Right are pressed navigate forward
                args.Handled = true;
                this.GoForward(this, new RoutedEventArgs());
            }
        }
    }  

このコード ブロックが完了すると、コントロールは関数 TextBox_KeyDown_1 に戻されます。そもそもコントロールが layoutawarepage.cs に送信される理由を理解できません。このコードは、プロジェクトに SplitPage を追加したときに生成されました。

4

1 に答える 1

3

私は同じ問題を抱えており、 MSDNで次の記事を見つけました。MS はバグを認識しており、内部データベースにファイルしていると書かれています。KeyDown の代わりに KeyUp を処理するという提案は、私の状況ではうまくいきました。

于 2013-01-25T22:17:54.427 に答える