Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在WPF中设置图像内容的动画?_C#_Wpf_Animation_Storyboard - Fatal编程技术网

C# 如何在WPF中设置图像内容的动画?

C# 如何在WPF中设置图像内容的动画?,c#,wpf,animation,storyboard,C#,Wpf,Animation,Storyboard,我有一个非常基本的用户控件,带有一个带有图像的按钮。我想通过将按钮更改为不同的图像来设置按钮图像的动画 <UserControl.Resources> <Image x:Key="GlyphDefault" Source="pack://application:,,,/X;component/images/Glyphs_Default.png" Height="8" Width="8" /> <Image x:Key="GlyphClicked" S

我有一个非常基本的用户控件,带有一个带有图像的按钮。我想通过将按钮更改为不同的图像来设置按钮图像的动画

<UserControl.Resources>
    <Image x:Key="GlyphDefault" Source="pack://application:,,,/X;component/images/Glyphs_Default.png" Height="8" Width="8" />
    <Image x:Key="GlyphClicked" Source="pack://application:,,,/X;component/images/Glyphs_Click.png" Height="8" Width="8"  />

</UserControl.Resources>
    <Grid>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup Name="MouseStates">
            <VisualState Name="MouseHover" >
                <Storyboard>
                    <ObjectAnimationUsingKeyFrames
                                Storyboard.TargetName="GlyphButton"
                                Storyboard.TargetProperty="Content"
                                Duration="0:0:1" >
                        <ObjectAnimationUsingKeyFrames.KeyFrames>
                            <DiscreteObjectKeyFrame KeyTime="0:0:1">
                                <DiscreteObjectKeyFrame.Value="{StaticResource GlyphClicked}" />
                            </DiscreteObjectKeyFrame>
                        </ObjectAnimationUsingKeyFrames.KeyFrames>
                    </ObjectAnimationUsingKeyFrames>
                </Storyboard>
            </VisualState>
            <VisualState Name="MouseNotHover" >
            </VisualState>
        </VisualStateGroup>

    </VisualStateManager.VisualStateGroups>
    <Button x:Name="GlyphButton" 
            MouseLeave="GlyphButton_MouseLeave"
            MouseEnter="GlyphButton_MouseEnter"
            Content="{StaticResource GlyphDefault}"
            />
</Grid>

不幸的是,当我运行此命令并将鼠标悬停在按钮上时,会出现“Freezable不能冻结”异常(鼠标事件处理程序会更改状态)。它似乎试图冻结当前图像,但由于某些原因无法冻结

我也尝试过在不使用静态资源的情况下(只是将图像内联)执行此操作,但出现了相同的错误。奇怪的是,我几乎找不到关于在Content属性上制作动画的文档或博客。我不得不想象这是一种常见的情况。你知道我做错了什么吗


我非常感谢你在这方面的帮助

这可能不是最好(或最简单)的方法。
Content
属性绝对不是WPF设计师对动画的想法。以下是我将如何做到这一点:

  • 按钮。内容
    设置为一个
    网格
    ,两个图像都放在里面(因此,彼此重叠)
  • 图像
    上要初始可见的
    不透明度设置为1.0,将
    图像
    上的0.0设置为初始隐藏
  • 使用
    DoubleAnimation
    而不是
    ObjectAnimation
    Opacity
    设置动画-您可以通过将一个图像的不透明度设置为0.0,同时将另一个图像的不透明度设置为1.0来切换图像。此外,根据持续时间的不同,这将为您提供一个很好的淡入过渡

  • 这可能不是最好(或最简单)的方法。
    Content
    属性绝对不是WPF设计师对动画的想法。以下是我将如何做到这一点:

  • 按钮。内容
    设置为一个
    网格
    ,两个图像都放在里面(因此,彼此重叠)
  • 图像
    上要初始可见的
    不透明度设置为1.0,将
    图像
    上的0.0设置为初始隐藏
  • 使用
    DoubleAnimation
    而不是
    ObjectAnimation
    Opacity
    设置动画-您可以通过将一个图像的不透明度设置为0.0,同时将另一个图像的不透明度设置为1.0来切换图像。此外,根据持续时间的不同,这将为您提供一个很好的淡入过渡

  • 谢谢你,查理。我已经考虑过了,但我觉得这有点刻薄。不过,我从WPF中学到的一件事是,一些感觉有点黑客化的东西实际上是最佳实践:-)谢谢Charlie。我已经考虑过了,但我觉得这有点刻薄。不过,我从WPF中学到的一件事是,有些感觉有点黑客化的东西实际上是最佳实践:-)