Wpf 基于ResourceDictionary的图像变换

Wpf 基于ResourceDictionary的图像变换,wpf,image,animation,styles,storyboard,Wpf,Image,Animation,Styles,Storyboard,我正在尝试移动和缩放鼠标上的图像移动/图像的来源已更改。我为图像编写了以下样式,但它不起作用: <Style x:Key="MovingImage" TargetType="{x:Type Image}"> <Setter Property="HorizontalAlignment" Value="Center"/> <Setter Property="Stretch" Value="Uniform"/> <Setter Pro

我正在尝试移动和缩放鼠标上的图像移动/图像的来源已更改。我为图像编写了以下样式,但它不起作用:

 <Style x:Key="MovingImage" TargetType="{x:Type Image}">
    <Setter Property="HorizontalAlignment" Value="Center"/>
    <Setter Property="Stretch" Value="Uniform"/>
    <Setter Property="VerticalAlignment" Value="Top"/>
    <Setter Property="Width" Value="auto"/>
    <Setter Property="Height" Value="auto"/>
    <Style.Resources>
        <Storyboard x:Key="TransformImage">
            <DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.X)"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TranslateTransform.Y)"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(ScaleTransform.ScaleX)"></DoubleAnimation>
            <DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(ScaleTransform.ScaleY)"></DoubleAnimation>
        </Storyboard>
    </Style.Resources>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Trigger.EnterActions>
                <BeginStoryboard Storyboard="{StaticResource TransformImage}" />
            </Trigger.EnterActions>
        </Trigger>
    </Style.Triggers>
</Style>

您需要做两件事才能使其正常工作。首先定义要设置的默认变换组(因此在您的情况下,变换组中的相应变换)


接下来,当您实际引用目标属性时,必须显式指定要更改的变换组的点。我还建议添加一些退出操作,这样您的图像不会永远消失=)


<Setter Property="RenderTransform">
    <Setter.Value>
        <TransformGroup>
            <TranslateTransform />
            <ScaleTransform />
        </TransformGroup>                        
    </Setter.Value>
</Setter>
<DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"></DoubleAnimation>
<DoubleAnimation Duration="0:0:3" By="-500" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"></DoubleAnimation>
<DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"></DoubleAnimation>
<DoubleAnimation Duration="0:0:3" By="-500" From="1" To="0.5" Storyboard.TargetProperty="(Image.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"></DoubleAnimation>