繁体   English   中英

C# DoubleAnimation 平滑度

[英]C# DoubleAnimation Smoothness

我正在尝试使用故事板和双动画淡出UIElement ,该元素确实淡出,但它似乎分两步完成,而不是其持续时间的逐渐变化。 看起来它从 1 跳到 0.5 到 0,只有 3 个变化,但我希望它比这更平滑地改变不透明度。

这是我当前的代码:

public void fadeout(UIElement target, int targetopac = 0, int fadetime = 1000)
{
    Storyboard FadeOut = new Storyboard();
    DoubleAnimation Fade = new DoubleAnimation();
    Fade.From = target.Opacity;
    Fade.To = targetopac;
    Fade.Duration = TimeSpan.FromMilliseconds(fadetime);
    FadeOut.Children.Add(Fade);
    Storyboard.SetTarget(Fade, target);
    Storyboard.SetTargetProperty(Fade, new PropertyPath("(UIElement.Opacity)"));
    FadeOut.Begin();
}

编辑:该代码似乎在 64 位系统上完美运行,但我在跳转时尝试的任何 32 位系统仍然会发生

我不确定为什么您拥有的 C# 代码没有按预期工作,但如果 XAML 代码对您有用,这里是 XAML 中执行相同操作的示例。 我觉得 XAML 更清晰、更简洁。 在这里,我将动画绑定到在元素上单击鼠标时触发,例如:

<Grid Background="Red" >
    <Grid.Triggers>
        <EventTrigger RoutedEvent="MouseDown">
            <BeginStoryboard>
                <Storyboard x:Key="">
                    <DoubleAnimation To="0" Duration="00:00:01" Storyboard.TargetProperty="Opacity" AutoReverse="True" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Grid.Triggers>
</Grid>

但是您当然可以将它附加到任何其他事件或通过使用其资源键定位它来从代码后面调用故事板,如下所示:

<Grid Background="Red" x:Name="MyGrid">
    <Grid.Resources>
        <Storyboard x:Key="OpacityStoryboard">
            <DoubleAnimation To="0" Duration="00:00:01"
                             Storyboard.Target="{x:Reference Name=MyGrid}"
                             Storyboard.TargetProperty="Opacity"
                             AutoReverse="True" />
        </Storyboard>
    </Grid.Resources>
</Grid>

像这样调用:

(MyGrid.Resources["OpacityStoryboard"] as Storyboard).Begin();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM