You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Style.Triggers下定义多个DataTrigger触发VS2022报错是Bug吗?

结论

你这个写法完全合法,报错是VS2022 XAML设计器的已知Bug,不是你的代码问题。

具体说明

  • WPF的<Style.Triggers>原生支持定义多个DataTrigger,运行时会按定义顺序依次匹配触发条件,你的代码逻辑和语法完全符合规范,这也是实际运行没有任何错误的原因。
  • 这个「TriggerAction object must be associated with one and only one trigger object」报错是VS2022设计时静态检查的缺陷,在处理带EnterActions的DataTrigger、且Setter内嵌了变换类对象时,设计器偶尔会错误判定TriggerAction被重复关联,实际不存在这个问题。

可选修复方案(消除设计时报错)

如果不想看到这个提示,可以把RotateTransform的定义从DataTrigger的Setter里移到TextBlock的直接属性中,修改后的代码如下:

<TextBlock 
      FontSize="26"
      Padding="15 0" 
      TextAlignment="Center" 
      VerticalAlignment="Center"
      RenderTransformOrigin="0.5, 0.5">
      <!-- 把RotateTransform移到这里作为默认属性 -->
      <TextBlock.RenderTransform>
          <RotateTransform Angle="0"/>
      </TextBlock.RenderTransform>
      <TextBlock.Style>
          <Style TargetType="{x:Type TextBlock}">
              <Setter Property="Text" Value="&#xf144;"/>
              <Setter Property="FontFamily" Value="font awesome 6 free regular"/>
              <Setter Property="Foreground" Value="#2FAA55"/>
              <Style.Triggers>
                  <!--Pause symbol-->
                  <DataTrigger Binding="{Binding SyncStatus, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" Value="False">
                      <Setter Property="Foreground" Value="#B03050"/>
                      <Setter Property="Text" Value="&#xf28b;"/>
                  </DataTrigger>
                  <!--Sync symbol-->
                  <DataTrigger Binding="{Binding IsSyncing, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" Value="True">
                      <Setter Property="Foreground" Value="#3050B0"/>
                      <Setter Property="Text" Value="&#xf2f1;"/>
                      <Setter Property="FontFamily" Value="font awesome 6 free solid"/>
                      <DataTrigger.EnterActions>
                          <BeginStoryboard>
                              <Storyboard>
                                  <DoubleAnimation
                                      To="0"
                                      From="360"
                                      Duration="0:0:1"
                                      RepeatBehavior="Forever"
                                      Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"/>
                              </Storyboard>
                          </BeginStoryboard>
                      </DataTrigger.EnterActions>
                  </DataTrigger>
              </Style.Triggers>
          </Style>
      </TextBlock.Style>
  </TextBlock>

如果不在意设计时的提示,完全可以忽略这个报错,不会影响编译和最终程序运行。

内容的提问来源于stack exchange,提问作者Yaron Binder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:45:05