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

WPF中DataTrigger实现图标旋转无效,求排查代码问题

问题排查与修复

你的代码里图标不旋转的核心原因是Path未配置RotateTransform,动画找不到要修改的Angle属性,同时存在动画目标路径和停止逻辑的疏漏,具体修复如下:

1. 给Path添加RotateTransform

需要在Path中加入RenderTransform并包含RotateTransform,同时设置旋转中心(避免图标偏移):

<Path Name="IcoMissionState" Stretch="Fill">
    <!-- 添加旋转变换配置 -->
    <Path.RenderTransform>
        <RotateTransform CenterX="10" CenterY="10"/> <!-- 对应Width/Height=20的中心位置 -->
    </Path.RenderTransform>
    <!-- 原有Style代码 -->
</Path>

2. 修正动画的TargetProperty路径

原动画的属性路径不正确,需指定到RenderTransform下的RotateTransform:

<DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
                 AutoReverse="False"
                 RepeatBehavior="Forever"
                 From="0"
                 To="-360"
                 FillBehavior="HoldEnd" <!-- 改为HoldEnd,避免条件退出后角度重置 -->
                 Duration="0:0:4" />

3. 添加动画停止逻辑(推荐)

当MultiDataTrigger的条件不再满足时,需停止动画,否则动画会持续播放。给BeginStoryboard命名并添加ExitActions:

<MultiDataTrigger.EnterActions>
    <BeginStoryboard Name="RotateStoryboard"> <!-- 给BeginStoryboard命名 -->
        <Storyboard>
            <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
                             AutoReverse="False"
                             RepeatBehavior="Forever"
                             From="0"
                             To="-360"
                             FillBehavior="HoldEnd"
                             Duration="0:0:4" />
        </Storyboard>
    </BeginStoryboard>
</MultiDataTrigger.EnterActions>
<!-- 添加退出时停止动画的逻辑 -->
<MultiDataTrigger.ExitActions>
    <StopStoryboard BeginStoryboardName="RotateStoryboard"/>
</MultiDataTrigger.ExitActions>

完整修复后的代码

<Canvas ClipToBounds="True" Margin="0,0,0,0" Width="27" Height="27" HorizontalAlignment="Center">
    <Path Name="IcoMissionState" Stretch="Fill">
        <Path.RenderTransform>
            <RotateTransform CenterX="10" CenterY="10"/>
        </Path.RenderTransform>
        <Path.Style>
            <Style TargetType="{x:Type Path}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=[StatoMissione]}" Value="2">
                        <Setter Property="Data" Value="{DynamicResource IcoMSPrenotato}"/>
                        <Setter Property="Width" Value="20"/>
                        <Setter Property="Height" Value="20"/>
                        <Setter Property="ToolTip" Value="Prenotato"/>
                    </DataTrigger>
                    <MultiDataTrigger>
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="False"/>
                            <Condition Binding="{Binding Path=[StatoMissione]}" Value="3"/>
                        </MultiDataTrigger.Conditions>
                        <Setter Property="Fill" Value="{DynamicResource Scb_Blu_02}"/>
                        <Setter Property="Data" Value="{DynamicResource IcoMSInEsecuzione}"/>
                        <Setter Property="Width" Value="20"/>
                        <Setter Property="Height" Value="20"/>
                        <Setter Property="ToolTip" Value="In esecuzione"/>
                        <MultiDataTrigger.EnterActions>
                            <BeginStoryboard Name="RotateStoryboard">
                                <Storyboard>
                                    <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
                                                     AutoReverse="False"
                                                     RepeatBehavior="Forever"
                                                     From="0"
                                                     To="-360"
                                                     FillBehavior="HoldEnd"
                                                     Duration="0:0:4" />
                                </Storyboard>
                            </BeginStoryboard>
                        </MultiDataTrigger.EnterActions>
                        <MultiDataTrigger.ExitActions>
                            <StopStoryboard BeginStoryboardName="RotateStoryboard"/>
                        </MultiDataTrigger.ExitActions>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </Path.Style>
    </Path>
</Canvas>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:43:13