我正在尝试采用一种风格来执行我的所有触发器。这就是我所拥有的,但 SoundPlayerAction 没有触发:
<Style x:Key="{x:Type ListBoxItem}" TargetType="ListBoxItem">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Name="Border" Padding="2" SnapsToDevicePixels="true">
<ContentPresenter />
</Border>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="Border.MouseDown">
<SoundPlayerAction Source="/sounds/simpleclick.wav"/>
</EventTrigger>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
最佳答案
我测试了这个 XAML,唯一的问题是您的 RoutedEvent 没有触发。 Border.MouseDown 肯定行不通。如果您希望在选择项目时播放声音(这似乎是您正在尝试执行的操作),请尝试 GotFocus 事件。
因此,将您的 EventTrigger 更改为:
<EventTrigger RoutedEvent="ListBoxItem.GotFocus">
对我来说,这很有效,声音开始播放。
关于WPF——为什么这个 EventTrigger 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1228400/