2
await VolumeRing.Fade(value: 1f, duration: 20, delay: 0).StartAsync();

我的问题很简单。我正在使用 UWP 社区工具包为 xaml 元素的淡入淡出动画制作动画,但我什至检查了断点;上面的代码确实将其不透明度从 0 变为 1,而不是不透明度保持在 0(这是我为元素设置的默认值)。

更新

public CompactNowPlayingPage()
{
    InitializeComponent();
    ElementCompositionPreview.GetElementVisual(VolumeRing).Opacity = 0;           

}
private async void VolumeFadeIn()
{
    await VolumeRing.Fade(value: 1f, duration: 20, delay: 0).StartAsync();
}
private async void VolumeFadeOut()
{
    await VolumeRing.Fade(value: 0f, duration: 1500, delay: 3000).StartAsync();
}

//invoked by KeyboardShortCuts
private void ChangeVolume(bool increase)
{
    if (IsControlPressed)
    {
        VolumeFadeIn();
        if (increase&&Media.Volume<100)
            Media.Volume += 5;
        else if(!increase&&Media.Volume>0)
            Media.Volume -= 5;
        VolumeRing.Value = Media.Volume;
        VolumeFadeOut();
    }
}

XAML

 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <vlc:MediaElement AreTransportControlsEnabled="True"
                          Name="Media"                     
                          HardwareAcceleration="True"
                          AutoPlay="True">
        </vlc:MediaElement>
        <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,32,0,0">
            <notification:SfProgressBar Name="VolumeRing"
                                        HorizontalAlignment="Right"
                                        VerticalAlignment="Top"
                                        Margin="0,16,48,0"
                                        FontSize="24"
                                        Width="Auto"
                                        Value="{x:Bind Media.Volume, Mode=OneWay}"
                                        Height="Auto"
                                        FillColor="{ThemeResource SystemAccentColor}"
                                        BackRimStrokeThickness="12"
                                        StrokeThickness="12"
                                        ProgressType="SolidCircular"
                                        >
                <notification:SfProgressBar.Foreground>
                    <SolidColorBrush Color="WhiteSmoke" Opacity="0.7"/>
                </notification:SfProgressBar.Foreground>
            </notification:SfProgressBar>
        </Grid>
    </Grid>
4

1 回答 1

3

看起来默认情况下 Toolkit 使用Visual.Opacity动画Fade,如果您在 xaml 代码中设置Opacity0它不会工作,因为Visual.OpacityUIElement.Opacity.

因此,您可以删除Opacity="0"xaml 代码,然后在构造函数中将 's 设置为,如下Opacity所示-VolumeRingVisual0

ElementCompositionPreview.GetElementVisual(VolumeRing).Opacity = 0;

或者,保留Opacity="0"xaml 代码,但在调用方法之前设置AnimationSet.UseComposition为-falseFade

AnimationSet.UseComposition = false;

更新

好的,刚刚看了一下源代码,我错了,Toolkit默认使用 Composition API。有点令人惊讶,但无论如何......您应该删除Visual.Opacity构造函数中的设置并将设置放回Opacityxaml 代码中。

顺便说一句,你打电话给他们,我猜你想等待元素先显示然后隐藏它。因此,您需要将 hide 和 show 方法从 更改async voidasync Task

于 2017-06-13T12:10:23.967 回答