我有一个ComboBox.在不更改模板的情况下,有什么方法可以在用户将鼠标放在ComboBoxItem上时,但在选择实际发生之前启动代码?看起来我应该能够以ComboBoxItem的样式指定EventTrigger或Trigger来执行此操作.
<ComboBox Grid.Column="1" Grid.Row="0"
ItemsSource="{Binding Voices}"
SelectedItem="{Binding SelectedVoice, Mode=TwoWay}">
<ComboBox.Resources>
<Style TargetType="{x:Type ComboBoxItem}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
... Launch my code from code behind... but HOW? ...
</Trigger>
</Style.Triggers>
</Style>
</ComboBox.Resources>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)
我也可以使用MouseEnter,但如果可能的话,我宁愿不构建单独的DataTemplate或ContentTemplate.
更新.这个片段背后的想法是当用户将鼠标悬停在新语音上时播放测试音频,我必须从代码端进行操作.救命!
您可以使用EventSetter:
<ComboBox.Resources>
<Style TargetType="{x:Type ComboBoxItem}">
<EventSetter Event="PreviewMouseMove" Handler="ComboBoxItem_PreviewMouseMove" />
</Style>
</ComboBox.Resources>
Run Code Online (Sandbox Code Playgroud)
在后面的代码中:
private void ComboBoxItem_PreviewMouseMove(object sender, MouseEventArgs e)
{
ComboBoxItem item = sender as ComboBoxItem;
//Now you can use this Item
}
Run Code Online (Sandbox Code Playgroud)