【问题标题】:WPF setting focus to ComboboxWPF 将焦点设置为组合框
【发布时间】:2014-01-06 23:34:02
【问题描述】:

只需在新的 WPF 应用程序中放置一个按钮和一个组合框

在按钮单击时,只需使用 comboBox1.Focus()(或其他任何可能的方法)将焦点设置到组合框

问题:

1- 从代码设置焦点时(使用 focus()),组合框永远不会获得焦点。为什么?

2- 当使用 Tab 键导航时,组合框接收焦点并在控件周围显示一种焦点选择器?有没有办法从代码中做同样的事情(真正的焦点)?

谢谢

【问题讨论】:

  • 到目前为止你的代码是什么?
  • 不只是 comboBox1.SetFocus() 和带有默认属性的标准组合框(当然是可聚焦的)
  • 但我也尝试过 Keyboard.FocusManager.SetFocusedElement ,Keyboard.Focus(element),将焦点移到内部的文本框,使用 mousedown 等路由事件等等。

标签: c# wpf combobox focus


【解决方案1】:

我认为它确实有效 - 问题是在不可编辑的 ComboBox 中,很难从视觉上判断焦点是否在那里。

如果添加 IsEditable="True",您将看到它,当您单击按钮时,光标将移动到 ComboBox。

您使用 Tab 键看到的焦点选择器是键盘焦点。试试这个:在您的应用程序上,不要让 ComboBox 可编辑,导航到按钮并按空格键。您将看到 ComboBox 周围出现矩形选择,因为键盘焦点将移动到那里。

【讨论】:

  • Yes Focus() 似乎为组合框设置了一个类似的焦点(如果按箭头键,您会看到组合框上有一种焦点),但虚线仍然没有焦点。空格键和 IsEditable 也是一样的(它什么都没有改变)
  • 我实际上通过在 VS 2013 中创建一个新的 WPF 项目来尝试您的复制,并设置焦点 - 调用 CobmoBox.Focus() 或 Keyboard.Focus(ComboBox) 允许组合框接受键盘输入(箭头键将开始滚动项目)。但是没有视觉指示,除非 IsEditable 设置为 true。您是否专门寻找视觉指示器?在您的复制中,是否确实设置了焦点?
  • 是的,我正在寻找一种设置视觉指示器(虚线矩形)的方法。使用 focus() 焦点实际上正在设置,但没有“指示器”。 (顺便说一句,我的控件位于数据网格内,我只想拥有一个统一的外观,具体取决于是使用 Tab 键还是使用鼠标转到控件)
【解决方案2】:

只有当我们使用 Tab 键时才会出现焦点样式(虚线)..这就是为什么组合框只在按钮单击时获得焦点而不是焦点样式..但是您可以通过打开如下所示的下拉菜单来显示焦点

     private void Button_Click_1(object sender, RoutedEventArgs e)
    {                              
         Cmb.Focus();
         Cmb.IsDropDownOpen = true;                                
    }

对不起,如果我对你的方法有误。

【讨论】:

  • 我不想打开下拉菜单来设置焦点。只有当我们使用 Tab 键时才会出现焦点样式(虚线)......真的吗?谢谢
【解决方案3】:

了解在comobox编辑区域中负责选择的combobox的selectionboxitem。尝试将 IsSelected 与 Focus 属性一起设置。

与仅选择和聚焦的 Winforms 相比,聚焦处理有很多新东西。检查 API:

http://msdn.microsoft.com/en-us/library/system.windows.controls.combobox%28v=vs.110%29.aspx

【讨论】:

  • selectionBoxItem 只是一个简单的字符串。无法在 API 中找到任何设置焦点的内容,例如使用选项卡转到组合框(以虚线为焦点)
  • 没有得到悬停线的原因是当我们单击按钮焦点是“即将转到按钮”然后在按钮焦点之前,在按钮单击中我们将焦点移动到另一个控件所以线没有被绘制。我尝试在按钮的 MouseEnter 中进行组合框焦点,哇……它按预期工作。我正在寻找我们在这里还需要什么,并会尽快回复您。希望你理解解释
  • 不,它根本不起作用......它与点击事件无关。 (点击按钮只是启动代码的一个例子......你会在其他任何地方遇到同样的问题(前加载))
  • 这在我的示例中带来了虚线。我只在按钮鼠标输入中做了combobox.focus,我得到了虚线框: void button1_MouseEnter(object sender, MouseEventArgs e) { comboBox1.Focus(); }
  • 谢谢....对我来说,它只能通过按按钮上的空格键(而不是用鼠标)来工作 不能使用这个解决方案:(
【解决方案4】:

如果您重新设置了组合框的样式,请注意“OverridesDefaultStyle”。将此设置为 true 可以隐藏虚线焦点矩形。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2010-10-10
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多