【问题标题】:'Setter' object cannot be added to 'EventTrigger'?“Setter”对象不能添加到“EventTrigger”?
【发布时间】:2011-03-09 15:12:08
【问题描述】:

我在下面的 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

【问题讨论】:

    标签: wpf triggers styles


    【解决方案1】:

    选项 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. 如果你想创建一个超链接控件,不要使用标签,也可以使用带有自定义模板的 Button(这将为你提供 Click 事件和 IsPressed 属性),或者,甚至更好 - 使用 Hyperlink 类,如下所示:

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

    这将具有您想要的所有样式。

    【讨论】:

      【解决方案2】:

      您必须使用 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-02
        • 2012-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多