SwipeBackThemeAnimation SwipeBackThemeAnimation SwipeBackThemeAnimation Class

Definition

Represents the preconfigured animation that applies to controls when an element slides back into its layout slot after a Swipe interaction.

public : sealed class SwipeBackThemeAnimation : Timeline, ISwipeBackThemeAnimation
public sealed class SwipeBackThemeAnimation : Timeline, ISwipeBackThemeAnimation
Public NotInheritable Class SwipeBackThemeAnimation Inherits Timeline Implements ISwipeBackThemeAnimation
<SwipeBackThemeAnimation ... />
Inheritance
SwipeBackThemeAnimationSwipeBackThemeAnimationSwipeBackThemeAnimation
Attributes
Windows 10 requirements
Device family
Windows 10 (introduced v10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduced v1)

Examples

The following example applies a SineEase easing function to a DoubleAnimation to create a decelerating animation.


<!-- Example template of a custom control that supports swipe selection.  
     A SwipeBackThemeAnimation is run when the control goes to the Normal state. -->
<ControlTemplate TargetType="local:SwipeControl">
    <Grid>
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="SwipeStates">                                
                <VisualState x:Name="Normal">
                    <Storyboard>
                        <SwipeBackThemeAnimation TargetName="contentRectangle"/>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Selected">
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SelectedText" 
                          Storyboard.TargetProperty="Visibility">
                            <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </VisualState>
                <VisualState x:Name="Hinting">
                    <Storyboard>
                        <SwipeHintThemeAnimation TargetName="contentRectangle"/>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
        <Rectangle Width="100" Height="100" Fill="{TemplateBinding Background}"/>

        <Rectangle x:Name="contentRectangle"
                    Width="100" 
                    Height="100" 
                    Fill="{TemplateBinding Foreground}"/>
        <TextBlock x:Name="SelectedText" 
                    Text="Selected" 
                    Visibility="Collapsed" 
                    Foreground="White" 
                    FontSize="20" 
                    VerticalAlignment="Center" 
                    HorizontalAlignment="Center"/>
    </Grid>
</ControlTemplate>
public sealed class SwipeControl : Control
{
    GestureRecognizer _gestureRecognizer;
    bool _isPointerDown = false;
    bool _isSelected = false;
    bool _isCrossSliding = false;

    public SwipeControl()
    {
        this.DefaultStyleKey = typeof(SwipeControl);
        // Direct gesture recognizer to recognize hold and swipe gestures.
        _gestureRecognizer = new GestureRecognizer();
        _gestureRecognizer.GestureSettings = GestureSettings.Hold | 
                                             GestureSettings.HoldWithMouse | 
                                             GestureSettings.CrossSlide;

        _gestureRecognizer.Holding += GestureRecognizer_Holding;
        _gestureRecognizer.CrossSlideHorizontally = false; // Support vertical swiping.
        _gestureRecognizer.CrossSliding += GestureRecognizer_CrossSliding;            
    }

    protected override void OnPointerPressed(PointerRoutedEventArgs e)
    {
        base.OnPointerPressed(e);
        _isPointerDown = CapturePointer(e.Pointer);
        // Send input to GestureRecognizer for processing.
        _gestureRecognizer.ProcessDownEvent(e.GetCurrentPoint(this));

    }

    protected override void OnPointerReleased(PointerRoutedEventArgs e)
    {
        base.OnPointerReleased(e);
        // Send input to GestureRecognizer for processing.
        _gestureRecognizer.ProcessUpEvent(e.GetCurrentPoint(this));

        _isCrossSliding = false;

        // Go to Normal state when pointer is released.
        if (!_isSelected)
        {
            VisualStateManager.GoToState(this, "Normal", true);
        }
    }

    protected override void OnPointerMoved(PointerRoutedEventArgs e)
    {
        base.OnPointerMoved(e);
        if (_isPointerDown)
        {
            // Send input to GestureRecognizer for processing.
            _gestureRecognizer.ProcessMoveEvents(e.GetIntermediatePoints(this));
        }
    }

    void GestureRecognizer_Holding(GestureRecognizer sender, HoldingEventArgs args)
    {
        // Go to Hinting state if control is not already selected.
        if (!_isSelected)
        {
            VisualStateManager.GoToState(this, "Hinting", true);
        }
    }

    void GestureRecognizer_CrossSliding(GestureRecognizer sender, CrossSlidingEventArgs args)
    {
        // Prevent multiple state changes for the same swipe gesture.
        if (!_isCrossSliding)
        {
            _isCrossSliding = true;                

            // Toggle between Selected and Normal on swipe gesture.
            _isSelected = !_isSelected;
            if (_isSelected)
            {
                VisualStateManager.GoToState(this, "Selected", true);
            }
            else
            {
                VisualStateManager.GoToState(this, "Normal", true);
            }
        }
    }
}
// SwipeControl.h:
public ref class SwipeControl sealed : public Windows::UI::Xaml::Controls::Control
{
public:
    SwipeControl();

protected:
    virtual void OnPointerPressed(Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e) override;
    virtual void OnPointerReleased(Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e) override;
    virtual void OnPointerMoved(Windows::UI::Xaml::Input:: PointerRoutedEventArgs^ e) override;

private:
    Windows::UI::Input::GestureRecognizer^     m_gestureRecognizer;
    bool                                       m_isPointerDown;
    bool                                       m_isSelected;
    bool                                       m_isCrossSliding;

    void GestureRecognizer_Holding(Windows::UI::Input::GestureRecognizer^ sender,    
        Windows::UI::Input::HoldingEventArgs^ args);
    void GestureRecognizer_CrossSliding(Windows::UI::Input::GestureRecognizer^ sender, 
        Windows::UI::Input::CrossSlidingEventArgs^ args);
};

// SwipeControl.cpp:
SwipeControl::SwipeControl() : m_isCrossSliding(false), m_isPointerDown(false), m_isSelected(false)
{
    DefaultStyleKey = "DocsCPP.SwipeControl";

    m_gestureRecognizer = ref new GestureRecognizer();
    m_gestureRecognizer->GestureSettings = GestureSettings::Hold | 
                                              GestureSettings::HoldWithMouse | 
                                              GestureSettings::CrossSlide;

    m_gestureRecognizer->Holding::add(ref new TypedEventHandler<GestureRecognizer^, 
        HoldingEventArgs^>(this, &SwipeControl::GestureRecognizer_Holding));
    m_gestureRecognizer->CrossSlideHorizontally = false; // Support vertical swiping.
    m_gestureRecognizer->CrossSliding::add(ref new TypedEventHandler<GestureRecognizer^, 
        CrossSlidingEventArgs^>(this, &SwipeControl::GestureRecognizer_CrossSliding));
}


void SwipeControl::OnPointerPressed(PointerRoutedEventArgs^ e)
{
    m_isPointerDown = CapturePointer(e->Pointer);
    // Send input to GestureRecognizer for processing.
    m_gestureRecognizer->ProcessDownEvent(e->GetCurrentPoint(this));
}

void SwipeControl::OnPointerReleased(PointerRoutedEventArgs^ e)
{
    // Send input to GestureRecognizer for processing.
    m_gestureRecognizer->ProcessUpEvent(e->GetCurrentPoint(this));

    m_isCrossSliding = false;

    // Go to Normal state when pointer is released.
    if (!m_isSelected)
    {
        VisualStateManager::GoToState(this, "Normal", true);
    }
}

void SwipeControl::OnPointerMoved(PointerRoutedEventArgs^ e)
{
    if (m_isPointerDown)
    {
        // Send input to GestureRecognizer for processing.
        m_gestureRecognizer->ProcessMoveEvents(e->GetIntermediatePoints(this));
    }
}

void SwipeControl::GestureRecognizer_Holding(GestureRecognizer^ sender, HoldingEventArgs^ args)
{
    // Go to Hinting state if control is not already selected.
    if (!m_isSelected)
    {
        VisualStateManager::GoToState(this, "Hinting", true);
    }
}

void SwipeControl::GestureRecognizer_CrossSliding(GestureRecognizer^ sender, CrossSlidingEventArgs^ args)
{
    // Prevent multiple state changes for the same swipe gesture.
    if (!m_isCrossSliding)
    {
        m_isCrossSliding = true;                

        // Toggle between Selected and Normal on swipe gesture.
        m_isSelected = !m_isSelected;
        if (m_isSelected)
        {
            VisualStateManager::GoToState(this, "Selected", true);
        }
        else
        {
            VisualStateManager::GoToState(this, "Normal", true);
        }
    } 
}

Remarks

Note that setting the Duration property has no effect on this object since the duration is preconfigured.

Constructors

SwipeBackThemeAnimation() SwipeBackThemeAnimation() SwipeBackThemeAnimation()

Initializes a new instance of the SwipeBackThemeAnimation class.

public : SwipeBackThemeAnimation()
public SwipeBackThemeAnimation()
Public Sub New()
See Also

Properties

AllowDependentAnimations AllowDependentAnimations AllowDependentAnimations

Inherited from Timeline

AutoReverse AutoReverse AutoReverse

Inherited from Timeline

AutoReverseProperty AutoReverseProperty AutoReverseProperty

Inherited from Timeline

BeginTime BeginTime BeginTime

Inherited from Timeline

BeginTimeProperty BeginTimeProperty BeginTimeProperty

Inherited from Timeline

Dispatcher Dispatcher Dispatcher

Inherited from DependencyObject

Duration Duration Duration

Inherited from Timeline

DurationProperty DurationProperty DurationProperty

Inherited from Timeline

FillBehavior FillBehavior FillBehavior

Inherited from Timeline

FillBehaviorProperty FillBehaviorProperty FillBehaviorProperty

Inherited from Timeline

FromHorizontalOffset FromHorizontalOffset FromHorizontalOffset

Gets or sets the distance by which the target is translated in the horizontal direction when the animation is active.

public : double FromHorizontalOffset { get; set; }
public double FromHorizontalOffset { get; set; }
Public ReadWrite Property FromHorizontalOffset As double
<SwipeBackThemeAnimation FromHorizontalOffset="double" />
Value
double double double

The horizontal offset translation, in pixels.

See Also

FromHorizontalOffsetProperty FromHorizontalOffsetProperty FromHorizontalOffsetProperty

Identifies the FromHorizontalOffset dependency property.

public : static DependencyProperty FromHorizontalOffsetProperty { get; }
public static DependencyProperty FromHorizontalOffsetProperty { get; }
Public Static ReadOnly Property FromHorizontalOffsetProperty As DependencyProperty
Value
DependencyProperty DependencyProperty DependencyProperty

The identifier for the FromHorizontalOffset dependency property.

See Also

FromVerticalOffset FromVerticalOffset FromVerticalOffset

Gets or sets the distance by which the target is translated in the vertical direction when the animation is active.

public : double FromVerticalOffset { get; set; }
public double FromVerticalOffset { get; set; }
Public ReadWrite Property FromVerticalOffset As double
<SwipeBackThemeAnimation FromVerticalOffset="double" />
Value
double double double

The vertical offset translation, in pixels.

See Also

FromVerticalOffsetProperty FromVerticalOffsetProperty FromVerticalOffsetProperty

Identifies the FromHorizontalOffset dependency property.

public : static DependencyProperty FromVerticalOffsetProperty { get; }
public static DependencyProperty FromVerticalOffsetProperty { get; }
Public Static ReadOnly Property FromVerticalOffsetProperty As DependencyProperty
Value
DependencyProperty DependencyProperty DependencyProperty

The identifier for the FromHorizontalOffset dependency property.

See Also

RepeatBehavior RepeatBehavior RepeatBehavior

Inherited from Timeline

RepeatBehaviorProperty RepeatBehaviorProperty RepeatBehaviorProperty

Inherited from Timeline

SpeedRatio SpeedRatio SpeedRatio

Inherited from Timeline

SpeedRatioProperty SpeedRatioProperty SpeedRatioProperty

Inherited from Timeline

TargetName TargetName TargetName

Gets or sets the reference name of the control element being targeted.

public : Platform::String TargetName { get; set; }
public string TargetName { get; set; }
Public ReadWrite Property TargetName As string
<SwipeBackThemeAnimation TargetName="nameString" />
Value
Platform::String string string

The reference name. This is typically the x:Name of the relevant element as declared in XAML.

See Also

TargetNameProperty TargetNameProperty TargetNameProperty

Identifies the TargetName dependency property.

public : static DependencyProperty TargetNameProperty { get; }
public static DependencyProperty TargetNameProperty { get; }
Public Static ReadOnly Property TargetNameProperty As DependencyProperty
Value
DependencyProperty DependencyProperty DependencyProperty

The identifier for the TargetName dependency property.

See Also

Methods

ClearValue(DependencyProperty) ClearValue(DependencyProperty) ClearValue(DependencyProperty)

Inherited from DependencyObject

GetAnimationBaseValue(DependencyProperty) GetAnimationBaseValue(DependencyProperty) GetAnimationBaseValue(DependencyProperty)

Inherited from DependencyObject

GetValue(DependencyProperty) GetValue(DependencyProperty) GetValue(DependencyProperty)

Inherited from DependencyObject

ReadLocalValue(DependencyProperty) ReadLocalValue(DependencyProperty) ReadLocalValue(DependencyProperty)

Inherited from DependencyObject

RegisterPropertyChangedCallback(DependencyProperty,DependencyPropertyChangedCallback) RegisterPropertyChangedCallback(DependencyProperty,DependencyPropertyChangedCallback) RegisterPropertyChangedCallback(DependencyProperty,DependencyPropertyChangedCallback)

Inherited from DependencyObject

SetValue(DependencyProperty,Object) SetValue(DependencyProperty,Object) SetValue(DependencyProperty,Object)

Inherited from DependencyObject

UnregisterPropertyChangedCallback(DependencyProperty,Int64) UnregisterPropertyChangedCallback(DependencyProperty,Int64) UnregisterPropertyChangedCallback(DependencyProperty,Int64)

Inherited from DependencyObject

Events

Completed Completed Completed

Inherited from Timeline

See Also