2010-06-29 6 views
2

Je reçois l'erreur suivante sur le code WPF ci-dessous: L'objet 'Setter' ne peut pas être ajouté à 'EventTrigger'. L'objet donné doit être une instance de TriggerAction ou un type dérivé.L'objet 'Setter' ne peut pas être ajouté à '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> 

Quelqu'un peut-il expliquer et me diriger dans la bonne direction?

MadSeb

Répondre

2

Option 1 - Utilisation BeginStoryboard comme ChrisF dit

Option 2 - N'utilisez pas EventTrigger - par exemple, pour une étiquette qui change de couleur d'arrière-plan lorsque vous passez la souris dessus:

<Style TargetType="Label"> 
    <Setter Property="Background" Value="Blue"/> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="true" > 
      <Setter Property="Background" Value="Red"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Malheureusement, il n'existe aucune propriété IsMouseDown que vous pouvez utiliser.

A propos de votre exemple:

  1. Vous ne devez pas placer le curseur sur MouseEnter, situé juste à la propriété du curseur et affectera uniquement le curseur de la souris lorsque la souris survole le contrôle. Si vous souhaitez créer un contrôle de lien hypertexte n'utilisez pas d'étiquette, eitehr utilise un bouton avec un modèle personnalisé (cela vous donnera l'événement Click et la propriété IsPressed) ou, mieux encore, utilisez la classe Hyperlink ceci:

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

cela aura tout le style que vous vouliez.

0

Vous devez utiliser un TriggerAction pour modifier les valeurs comme dans cet exemple de la page MSDN EventTriggers:

<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> 
Questions connexes