Sye*_*yed 5 wpf wpf-controls access-keys
我有带有工具栏的 WPF 应用程序。在工具栏中,我有一些用户控件作为工具。
我已经为每个控件设置了访问密钥,它工作正常。
问题是:如果我点击一个用户控件(它由按钮和标签组成,我已经为按钮设置了访问键),给定的任务就完成了,但是当我按下任何访问键而不按“Alt”键时,它就会得到被选中。
有任何想法吗?
显然,这是微软故意的改变。请参阅 Atanas Koralski 的回答:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/14f6f49f-0027-471b-b68c-e7f6ba012012
菜单和工具栏助记符无需按 Alt 键即可使用。我们决定在所有情况下都具有统一的行为,因此无需按 Alt 键即可访问关键工作。
我知道这与 Forms 不一样,我们将考虑这个问题并在下一版本中更改行为。
目前,作为一种解决方法,您可以为所有 AccessKeyPressed 事件注册一个类处理程序,并在未按下 Alt 键时处理该事件。
Run Code Online (Sandbox Code Playgroud)EventManager.RegisterClassHandler(typeof(UIElement), AccessKeyManager.AccessKeyPressedEvent, new AccessKeyPressedEventHandler(OnAccessKeyPressed));...
Run Code Online (Sandbox Code Playgroud)private static void OnAccessKeyPressed(object sender, AccessKeyPressedEventArgs e) { if (!e.Handled && e.Scope == null && (e.Target == null || e.Target == label)) { // If Alt key is not pressed - handle the event if ((Keyboard.Modifiers & ModifierKeys.Alt) != ModifierKeys.Alt) { e.Target = null; e.Handled = true; } } }
另请参阅 mfc2wpf 的回复:
我已经使用了上面的方法并且有效。但是,这阻止了 Enter 和 ESC 的默认操作。所以我在方法的顶部插入了以下内容。
Run Code Online (Sandbox Code Playgroud)if (Keyboard.IsKeyDown(Key.Enter) || Keyboard.IsKeyDown(Key.Escape)) return;
访问键包括Enter和,它们是具有或 的sEsc的默认键。如果您不想为这些按钮添加+和+ ,则需要将特殊条件添加到处理程序中。ButtonIsDefault = trueIsCancel = trueAltEnterAltEsc
| 归档时间: |
|
| 查看次数: |
3814 次 |
| 最近记录: |