Размер изображения uwp не может быть сброшен после анимации раскадровки - PullRequest
0 голосов
/ 29 октября 2018

Я использую эту раскадровку XAML для реализации перехода между двумя изображениями с именами ctlIMage и altImage, которые определены следующим образом:

    <Image x:Name = "ctlImage" Grid.Column ="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="4" VerticalAlignment= "Stretch"  HorizontalAlignment = "Stretch"  Stretch = "Uniform"  Opacity="0">
        <Image.RenderTransform>
            <CompositeTransform x:Name="image_Transform" ></CompositeTransform >
        </Image.RenderTransform >
    </Image>

        <Image x:Name = "altImage" Grid.Column ="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="4" VerticalAlignment= "Stretch"  HorizontalAlignment = "Stretch"  Stretch = "Uniform"  Opacity="0">
           <Image.RenderTransform>
            <CompositeTransform x:Name="altImage_Transform" ></CompositeTransform >
           </Image.RenderTransform >
        </Image>

        <Storyboard x:Name="ctlImageFadeOut" Completed="SwapAltCtl">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="ctlImage">
                <EasingDoubleKeyFrame KeyTime="0" Value="1.0" />
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"  />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="ScaleX" Storyboard.TargetName="image_Transform">
                <EasingDoubleKeyFrame KeyTime="0" Value="1.0" />
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.5"  />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="ScaleY" Storyboard.TargetName="image_Transform">
                <EasingDoubleKeyFrame KeyTime="0" Value="1.0" />
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0.5"  />
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="altImage">
                <EasingDoubleKeyFrame KeyTime="0" Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="1.0" />
            </DoubleAnimationUsingKeyFrames>

        </Storyboard>

Когда я играю анимацию, используя этот код:

            altImage.Opacity = 0;
            altImage.Visibility = Visibility.Visible;
            altImage.Source = await MainPlayList.GetCurrentImage((int)altImage.Height, (int)altImage.Width);
            ctlImageFadeOut.Begin();

И используйте этот метод, чтобы поменять местами оба изображения в конце анимации:

    private async void SwapAltCtl(object sender, object e)
    {
        ctlImage.Opacity = 0;
        image_Transform.ScaleX = 1;
        image_Transform.ScaleY = 1;
        ctlImage.Height = altImage.ActualHeight;
        ctlImage.Width = altImage.ActualWidth;
        ctlImage.Source = await MainPlayList.GetCurrentImage((int)ctlImage.Height, (int)ctlImage.Width);
        ctlImage.Opacity = 1;
        altImage.Opacity = 0;
        altImage.Visibility = Visibility.Collapsed;
    }

Я получаю ctlImage половинного размера, например ScaleX и ScaleY не сбрасываются после раскадровки XAML. Как вы видите, я даже пытался сбросить высоты и ширины до известных значений (альтернативное изображение, которое уже отображается).

Как мы можем сбросить изображение после анимации?

Спасибо!

1 Ответ

0 голосов
/ 29 октября 2018

Удалите метод SwapAltCtl, он вам на самом деле не нужен. Все, что вам нужно сделать, это установить свойство FillBehavior для Storyboard как Stop , значение по умолчанию для этого свойства HoldEnd .

Из документов

FillBehavior = "Стоп"

По умолчанию, когда анимация заканчивается, анимация оставляет значение свойства в качестве окончательного значения «Кому» или «По измененному» даже после того, как его продолжительность превышена. Однако если для свойства FillBehavior установить значение FillBehavior.Stop, значение анимированного значения возвращается к значению, которое было до применения анимации, или, точнее, к текущему действующему значению, определяемому системой свойств зависимостей ( Для получения дополнительной информации об этом различии см. Обзор свойств зависимости).

Есть еще одна строка для изменения. Когда анимация заканчивается, вы хотите, чтобы ctlImage был сброшен в исходное состояние и снова стал видимым, поэтому вы должны установить начальное значение Opacity для ctlImage как 1,0.

...