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;
}
我有一个基于 '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;
}