2

mvvm の方法で WPF アプリケーションを開始しました。メイン ウィンドウには、さまざまなページをナビゲートするためのフレーム コントロールが含まれています。このために、今のところ単純な NavigationService を使用します。

public class NavigationService : INavigationService
{

   private Frame _mainFrame;


    #region INavigationService Member

    public event NavigatingCancelEventHandler Navigating;

    public void NavigateTo(Uri uri)
    {
        if(EnsureMainFrame())
        {
            _mainFrame.Navigate(uri);
        }
    }

    public void GoBack()
    {
        if(EnsureMainFrame() && _mainFrame.CanGoBack)
        {
            _mainFrame.GoBack();
        }
    }

    #endregion

    private bool EnsureMainFrame()
    {
        if(_mainFrame != null)
        {
            return true;
        }

        var mainWindow = (System.Windows.Application.Current.MainWindow as MainWindow);
        if(mainWindow != null)
        {
            _mainFrame = mainWindow.NavigationFrame;
            if(_mainFrame != null)
            {
                // Could be null if the app runs inside a design tool
                _mainFrame.Navigating += (s, e) =>
                                             {
                                                 if (Navigating != null)
                                                 {
                                                     Navigating(s, e);
                                                 }
                                             };
                return true;
            }
        }
        return false;
    }

}

Page1 でボタンを押すと、NavigationService を使用して Page2 へのナビゲーションが強制されます。Page2 には TextBox があります。TextBox がフォーカスされている場合、ALT + 左矢印キーを使用して Page1 に戻ることができます。この動作を無効にするにはどうすればよいですか?

フレームコントロールと TextBox-Control で KeyboardNavigation.DirectionalNavigation="None" を設定しようとしましたが、成功しませんでした。

4

1 に答える 1

3

次のイベント ハンドラーをテキスト ボックスに追加して、alt + 左ナビゲーションを無効にします。

private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)) 
        && (Keyboard.IsKeyDown(Key.Left)))
    {
         e.Handled = true;
    }
} 

XAML

<TextBox ... KeyDown="textBox1_PreviewKeyDown" />

編集:矢印キー イベントをキャプチャするために PreviewKeyDown に変更されました

于 2012-06-27T18:30:11.573 に答える