2010-06-29 49 views
2

我在WPF代码下面出现以下错误: 'Setter'对象不能添加到'EventTrigger'中。给定的对象必须是TriggerAction的实例或派生类型。'Setter'对象无法添加到'EventTrigger'中?

<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

回答

2

选项1 - 使用BeginStoryboard像ChrisF说

选项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。

关于你的例子:

  1. 您不必设置上的MouseEnter光标,只需将光标财产,这只会影响到鼠标光标当鼠标在控制。

  2. 如果你想创建一个超链接控件,不要使用标签,eitehr使用带有自定义模板的按钮(这会给你Click事件和IsPressed属性),或者甚至更好 - 使用超链接类这样的:

    <TextBlock><Hyperlink>This is a link</Hyperlink></TextBlock> 
    

这将有所有你想要的造型。

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>