Объект 'Setter' не может быть добавлен в 'EventTrigger'? - PullRequest
2 голосов
/ 29 июня 2010

Я получаю следующую ошибку в коде 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

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Вариант 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) или, что еще лучше, используйте класс Hyperlink следующим образом:

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

Это будет иметь все необходимые стили.

0 голосов
/ 29 июня 2010

Вы должны использовать 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>
...