ComboBoxItem 键盘箭头和 Enter 键不起作用

ComboBoxItem keyboard arrow & Enter press not working

我有一个基于 'mvvm' 的 wpf 应用程序,带有组合框样式的控件模板,

<Style x:Key="Itmstyle" TargetType="ComboBoxItem">
<Setter Property="Template">
  <Setter.Value>
    <ControlTemplate TargetType="ComboBoxItem">
      <Button Content="{Binding Txt}" Command="{Binding DataContext.ClickCmd, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ComboBox}}}"
              Background="Transparent" BorderBrush="Transparent">          
        <Button.InputBindings>
          <KeyBinding Key="Enter" Command="{Binding DataContext.ClickCmd, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ComboBox}}}"/>
        </Button.InputBindings>
      </Button>
    </ControlTemplate>
  </Setter.Value>
</Setter>

样式是这样用的,

<ComboBox ItemContainerStyle="{StaticResource Itmstyle}"
      ItemsSource="{Binding Values}"
      DisplayMemberPath="Name"
      SelectedIndex="{Binding Indx}"
      IsSynchronizedWithCurrentItem="True"/>

当我使用键盘箭头时,按钮(在样式中)没有突出显示,只有项目周围的虚线焦点出现;当我按 Enter 键时,ClickCmd 没有执行。任何想法!请让我知道。非常感谢。

如果您想要一个组合选择既可以更改选择又可以触发命令,我认为最简单的方法是像您所做的那样添加一个按钮,但是在后面的代码中处理 Click 事件以设置组合:

例如

<ComboBox.ItemTemplate>
    <DataTemplate>
        <Button Content="{Binding Txt}" 
                Background="Transparent" BorderBrush="Transparent"
                Command="{Binding DataContext.ClickCmd, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ComboBox}}}"
                Click="ComboItem_Click"/>
        </Button>
    </DataTemplate>
</ComboBox.ItemTemplate>

然后在后面的代码中:

private void ComboItem_Click(object sender, RoutedEventArgs e)
{
    _combo.SelectedItem = ((Button)e.Source).DataContext;
}