Изменить UWP FlipView

Можно ли изменить эффект анимации при смене изображений в элементе управления UWP Flipview? Вместо скольжения я бы предпочел эффект перекрестного затухания.

Я не видел способ сделать это, но я хотел подтвердить. Любая помощь приветствуется.

Благодарю.

2 ответа

Решение

Вы должны быть в состоянии переопределить анимацию вручную, в коде позади. Во-первых, отключите встроенную анимацию, используя UseTouchAnimationsForAllNavigation= "False".

    <FlipView x:Name="FlipView" UseTouchAnimationsForAllNavigation="False" SelectionChanged="Selector_OnSelectionChanged" >
        <FlipView.Items>
            <Grid Background="Red"></Grid>
            <Grid Background="Blue"></Grid>
            <Grid Background="Green"></Grid>
        </FlipView.Items>
    </FlipView>

Затем запустите раскадровки в коде:

    private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (e.AddedItems.Count <= 0) return;
        if (e.RemovedItems.Count <= 0) return;

        var newSelectedItem = FlipView.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]) as FlipViewItem;
        var previousSelectedItem = FlipView.ItemContainerGenerator.ContainerFromItem(e.RemovedItems[0]) as FlipViewItem;

        if (newSelectedItem == null) return;
        if (previousSelectedItem == null) return;

        var duration = new Duration(TimeSpan.FromMilliseconds(500));

        var hideAnimation = new DoubleAnimation
        {
            From = 1.0,
            To = 0.0,
            AutoReverse = false,
            Duration = duration
        };

        var hideSb = new Storyboard();
        hideSb.Children.Add(hideAnimation);
        Storyboard.SetTargetProperty(hideSb, "Opacity");
        Storyboard.SetTarget(hideSb, previousSelectedItem);

        hideSb.Begin();

        var showAnimation = new DoubleAnimation
        {
            From = 0.0,
            To = 1.0,
            AutoReverse = false,
            Duration = duration
        };

        var showSb = new Storyboard();
        showSb.Children.Add(showAnimation);
        Storyboard.SetTargetProperty(showSb, "Opacity");
        Storyboard.SetTarget(showSb, newSelectedItem);

        showSb.Begin();
    }

Не было тщательного просмотра, но в шаблоне по умолчанию ( https://msdn.microsoft.com/en-us/library/windows/apps/mt299124.aspx) есть горизонтальная панель стека для элементов и средство просмотра прокрутки, так что я не вижу способа сделать это.

Лично я думаю, что было бы проще просто написать собственный элемент управления, который постепенно изменяет элементы коллекции, когда пользователь нажимает кнопки или что-то в этом роде.

Другие вопросы по тегам