wpf - Shift+Tab 在样式化 WPF 组合框中不起作用

标签 wpf wpf-style

我正在尝试设置 WPF 组合框的样式。一切正常,除了 IsEditable="true"时,Shift+Tab 拒绝移回上一个控件。似乎每次按下 Shift+Tab 时都会重新选择包含的 TextBox。选项卡工作正常。

我在这里使用 MS 发布的源代码:https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/combobox-styles-and-templates?view=netframeworkdesktop-4.8

github 上报告了一个问题,此处:https://github.com/dotnet/docs/issues/11552

但没有人提供解决方案。

我已经尝试了所有明显的事情,包括将 TabIndex 添加到另一个答案中建议的窗口中的所有控件,以及将 KeyboardNavigation.TabNavigation 设置为“无”和“本地”。我错过了什么?

无样式的组合框工作正常。

最佳答案

您必须从 IsTabStop="False" 中删除制表位 ( ComboBox ) ,如果处于编辑模式 ( IsEnabled="True" )。最好给 Style 添加相应的触发器:

<Style TargetType="{x:Type ComboBox}">

  ...

  <Style.Triggers>
    <Trigger Property="IsEditable" Value="true">
      <Setter Property="IsTabStop" Value="false"/>
    </Trigger>
  </Style.Triggers>
</Style>

最好使用 XAML 设计器提取模板,方法是右键单击选定的控件(在设计 View 中)并选择“编辑模板 | 编辑副本...”或使用Visual Studio Blend 修改控件的原始样式。 Microsoft Docs 提供的样式和模板并不总是准确的。原始样式(使用 Visual Studio 或 Blend 提取时)已经定义了此触发器,而 Microsoft Docs 版本中缺少该触发器。

关于wpf - Shift+Tab 在样式化 WPF 组合框中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64957928/

相关文章:

c# - WPF 样式未在运行时应用

c# - 从 app.config 配置部分将键值对读入字典

c# - 如何将 DispatcherObject (BitmapSource) 复制到不同的线程中?

c# - 使用两个图像创建按钮样式

c# - 类型引用找不到名为 '{clr-namespace :xxx}ClassName on MergedDictionary

wpf - 带有触发器的继承 WPF 样式不起作用

c# - WPF点击改变按钮背景

wpf - 绑定(bind)到 wpf 中父元素的属性

wpf - 更新到 ListBox 绑定(bind)集合后刷新 UI

WPF 内联样式未设置模板值