Interpret enter as tab WPF

喜夏-厌秋 提交于 2019-12-31 09:23:08

问题


I want to interpret Enter key as Tab key in whole my WPF application, that is, everywhere in my application when user press Enter I want to focus the next focusable control,except when button is focused. Is there any way to do that in application life circle? Can anyone give me an example?
Thanks a lot!


回答1:


You can use my EnterKeyTraversal attached property code if you like. Add it to the top-level container on a WPF window and everything inside will treat enter as tab:

<StackPanel my:EnterKeyTraversal.IsEnabled="True">
    ...
</StackPanel>



回答2:


I got around woodyiii's issue by adding a FrameworkElement.Tag (whose value is IgnoreEnterKeyTraversal) to certain elements (buttons, comboboxes, or anything I want to ignore the enter key traversal) in my XAML. I then looked for this tag & value in the attached property. Like so:

    if (e.Key == Key.Enter)
    {
        if (ue.Tag != null && ue.Tag.ToString() == "IgnoreEnterKeyTraversal")
        {
            //ignore
        }
        else
        {
            e.Handled = true;
            ue.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
        }
    }



回答3:


To change it in whole project you need to do this

  • In App.xaml.cs:

    protected override void OnStartup(StartupEventArgs e)
    {           
        EventManager.RegisterClassHandler(typeof(Grid), Grid.PreviewKeyDownEvent, new KeyEventHandler(Grid_PreviewKeyDown));
        base.OnStartup(e);
    }
    
    private void Grid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
    {
        var uie = e.OriginalSource as UIElement;
    
        if (e.Key == Key.Enter)
        {
            e.Handled = true;
            uie.MoveFocus(
            new TraversalRequest(
            FocusNavigationDirection.Next));
        }
    }
    
  • Compile. And done it. Now you can use enter like tab. Note: This work for elements in the grid




回答4:


woodyiii, There is a function in the UIElement called PredictFocus() which by its name know its function, then you can check if that element is enabled or not so as to move the focus to it or not...



来源:https://stackoverflow.com/questions/871619/interpret-enter-as-tab-wpf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!