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=""/> <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=""/> </DataTrigger> <!--Sync symbol--> <DataTrigger Binding="{Binding IsSyncing, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" Value="True"> <Setter Property="Foreground" Value="#3050B0"/> <Setter Property="Text" Value=""/> <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
相关产品推荐
相关产品推荐

