簡體   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