我在下面的WPF代码中收到以下错误: 'Setter'对象无法添加到'EventTrigger'。给定对象必须是TriggerAction的实例或派生类型。
<Style x:Key="LinkLabel" TargetType="{x:Type Label}">
<Setter Property="FontFamily" Value="Tahoma"/>
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="DarkBlue"/>
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter" >
<Setter Property="Cursor" Value="Hand"/>
</EventTrigger>
<EventTrigger RoutedEvent="MouseDown" >
<Setter Property="Foreground" Value="Red"/>
</EventTrigger>
<EventTrigger RoutedEvent="MouseUp" >
<Setter Property="Foreground" Value="DarkBlue"/>
</EventTrigger>
</Style.Triggers>
</Style>
任何人都可以解释并指出我正确的方向吗?
MadSeb
答案 0 :(得分:2)
选项1 - 像ChrisF一样使用BeginStoryboard
选项2 - 不要使用EventTrigger - 例如,对于在鼠标悬停时更改背景颜色的标签,请使用:
<Style TargetType="Label">
<Setter Property="Background" Value="Blue"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true" >
<Setter Property="Background" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
不幸的是,您无法使用IsMouseDown属性。
关于你的例子:
您不必将光标设置在MouseEnter上,只需设置Cursor属性,它只会在鼠标悬停在控件上时影响鼠标光标。
如果要创建超链接控件,请不要使用标签,eitehr使用带有自定义模板的Button(这将为您提供Click事件和IsPressed属性),或者更好 - 使用Hyperlink类像这样:
<TextBlock><Hyperlink>This is a link</Hyperlink></TextBlock>
这将具有您想要的所有样式。
答案 1 :(得分:0)
您必须使用TriggerAction
更改EventTriggers
MSDN页面中此示例中的值:
<Style TargetType="Rectangle">
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="Margin" Value="20" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="300" Duration="0:0:1.5"
AccelerationRatio="0.10" DecelerationRatio="0.25"
Storyboard.TargetProperty="(Canvas.Width)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:1.5"
AccelerationRatio="0.10" DecelerationRatio="0.25"
Storyboard.TargetProperty="(Canvas.Width)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>