【问题标题】:how to disable auto tab after pressing enter and losing focus of textbox按下回车键并失去文本框焦点后如何禁用自动选项卡
【发布时间】:2019-06-05 23:24:32
【问题描述】:

我在 TextBox 中有一个 keyDownEvent 的事件处理程序。现在,当我按 Enter 时,此事件处理程序将可见性更改为折叠并且文本框隐藏。它的问题在于,这显然会使文本框失去焦点并关注某事。其他在我的应用程序中。如何禁用另一个元素的自动对焦而不对焦?

我尝试了以下方法,但我真的搞砸了。

if (e->Key == Windows::System::VirtualKey::Enter) {
    this->mode = ITEM_MODE::SELECT; // will Change Visibility to Collapsed
    FocusManager::TryMoveFocus(FocusNavigationDirection::None);
    e->Handled = true;          
}

感谢您的帮助!

【问题讨论】:

  • 总是有一个前台应用程序(包括桌面),并且该应用程序总是有一个焦点元素,所以你问什么是不可能的
  • @MickyD 但我的应用启动时关注的是什么?

标签: xaml uwp c++-cx


【解决方案1】:

如何在按下回车键并失去文本框焦点后禁用自动标签

来源于官方文档,

UseSystemFocusVisuals 用于获取或设置一个值,该值指示控件是使用系统绘制的焦点视觉效果还是控件模板中定义的焦点视觉效果。

您可以将控件UseSystemFocusVisuals 属性设置为False。那么下一个控件将不会被系统聚焦。

<StackPanel Orientation="Vertical" Name="RootLayout" IsTapEnabled="False" >
    <TextBox HorizontalAlignment="Stretch" Height="44" KeyDown="TextBox_KeyDown" />
    <Button Content="FouceElement" UseSystemFocusVisuals="False"/>
    <Button Content="NextBtn" UseSystemFocusVisuals="False"/>
</StackPanel>

【讨论】:

  • 但通常您希望启用焦点视觉效果(例如,当按下 Tab 键时),但问题是如何以编程方式进入屏幕上没有焦点指示符时的状态(就像当您启动应用程序时 - 只有在您单击某些内容或按 Tab 后才会出现焦点视觉效果。
【解决方案2】:

如果您只是不希望自动聚焦的项目显示焦点指示器,您可以将 Focus 类型更改为 FocusState.Pointer

示例(C#):

object focusedElement = FocusManager.GetFocusedElement();
((Control)focusedElement).Focus(FocusState.Pointer); // This will hide focus indicator

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2013-09-16
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多