“Setter”对象无法添加到“EventTrigger”中?

时间:2010-06-29 13:20:47

标签: wpf triggers styles

我在下面的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 个答案:

答案 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属性。

关于你的例子:

  1. 您不必将光标设置在MouseEnter上,只需设置Cursor属性,它只会在鼠标悬停在控件上时影响鼠标光标。

  2. 如果要创建超链接控件,请不要使用标签,eitehr使用带有自定义模板的Button(这将为您提供Click事件和IsPressed属性),或者更好 - 使用Hyperlink类像这样:

    <TextBlock><Hyperlink>This is a link</Hyperlink></TextBlock>
    
  3. 这将具有您想要的所有样式。

答案 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>