SwipeBackThemeAnimation Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Représente l’animation préconfigurée qui s’applique aux contrôles lorsqu’un élément revient dans son emplacement de disposition après une interaction de balayage .
public ref class SwipeBackThemeAnimation sealed : Timeline
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class SwipeBackThemeAnimation final : Timeline
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class SwipeBackThemeAnimation : Timeline
Public NotInheritable Class SwipeBackThemeAnimation
Inherits Timeline
<SwipeBackThemeAnimation ... />
- Héritage
- Attributs
Exemples
L’exemple suivant applique une fonction d’accélération SineEase à une doubleanimation pour créer une animation décélération.
<!-- Example template of a custom control that supports swipe selection.
A SwipeBackThemeAnimation is run when the control goes to the Normal state. -->
-->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:BlankApp1">
<Style TargetType="local:SwipeControl" >
<Setter Property="Template">
<Setter.Value>
<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>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
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:
struct SwipeControl : SwipeControlT<SwipeControl>
{
SwipeControl();
void OnPointerPressed(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
void OnPointerReleased(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
void OnPointerMoved(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e);
private:
Windows::UI::Input::GestureRecognizer m_gestureRecognizer;
bool m_isPointerDown;
bool m_isSelected;
bool m_isCrossSliding;
void GestureRecognizer_Holding(Windows::UI::Input::GestureRecognizer const& sender, Windows::UI::Input::HoldingEventArgs const& args);
void GestureRecognizer_CrossSliding(Windows::UI::Input::GestureRecognizer const& sender, Windows::UI::Input::CrossSlidingEventArgs const& args);
};
// SwipeControl.cpp:
SwipeControl::SwipeControl() : m_isCrossSliding(false), m_isPointerDown(false), m_isSelected(false)
{
DefaultStyleKey(winrt::box_value(L"DocsCppWinRT.SwipeControl"));
m_gestureRecognizer.GestureSettings(
Windows::UI::Input::GestureSettings::Hold |
Windows::UI::Input::GestureSettings::HoldWithMouse |
Windows::UI::Input::GestureSettings::CrossSlide);
m_gestureRecognizer.Holding({ this, &SwipeControl::GestureRecognizer_Holding });
m_gestureRecognizer.CrossSlideHorizontally(false); // Support vertical swiping.
m_gestureRecognizer.CrossSliding({ this, &SwipeControl::GestureRecognizer_CrossSliding });
}
void SwipeControl::OnPointerPressed(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e)
{
m_isPointerDown = CapturePointer(e.Pointer());
// Send input to GestureRecognizer for processing.
m_gestureRecognizer.ProcessDownEvent(e.GetCurrentPoint(*this));
}
void SwipeControl::OnPointerReleased(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& 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)
{
Windows::UI::Xaml::VisualStateManager::GoToState(*this, L"Normal", true);
}
}
void SwipeControl::OnPointerMoved(Windows::UI::Xaml::Input::PointerRoutedEventArgs const& e)
{
if (m_isPointerDown)
{
// Send input to GestureRecognizer for processing.
m_gestureRecognizer.ProcessMoveEvents(e.GetIntermediatePoints(*this));
}
}
void SwipeControl::GestureRecognizer_Holding(Windows::UI::Input::GestureRecognizer const& /* sender */,
Windows::UI::Input::HoldingEventArgs const& /* args */)
{
// Go to Hinting state if control is not already selected.
if (!m_isSelected)
{
Windows::UI::Xaml::VisualStateManager::GoToState(*this, L"Hinting", true);
}
}
void SwipeControl::GestureRecognizer_CrossSliding(Windows::UI::Input::GestureRecognizer const& /* sender */,
Windows::UI::Input::CrossSlidingEventArgs const& /* 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)
{
Windows::UI::Xaml::VisualStateManager::GoToState(*this, L"Selected", true);
}
else
{
Windows::UI::Xaml::VisualStateManager::GoToState(*this, L"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);
}
}
}
Remarques
Notez que la définition de la propriété Duration n’a aucun effet sur cet objet, car la durée est préconfigurée.
Constructeurs
SwipeBackThemeAnimation() |
Initialise une nouvelle instance de la classe SwipeBackThemeAnimation. |
Propriétés
AutoReverse |
Obtient ou définit une valeur qui indique si la chronologie est lue en sens inverse après avoir effectué une itération vers l’avant. (Hérité de Timeline) |
BeginTime |
Obtient ou définit l’heure à laquelle cette chronologie doit commencer. (Hérité de Timeline) |
Dispatcher |
Retourne |
DispatcherQueue |
Obtient le |
Duration |
Obtient ou définit la durée de cette chronologie, sans prendre en compte les répétitions. (Hérité de Timeline) |
FillBehavior |
Obtient ou définit une valeur qui spécifie le comportement de l’animation une fois qu’elle a atteint la fin de sa période active. (Hérité de Timeline) |
FromHorizontalOffset |
Obtient ou définit la distance à laquelle la cible est traduite dans le sens horizontal lorsque l’animation est active. |
FromHorizontalOffsetProperty |
Identifie la propriété de dépendance FromHorizontalOffset . |
FromVerticalOffset |
Obtient ou définit la distance à laquelle la cible est traduite dans le sens vertical lorsque l’animation est active. |
FromVerticalOffsetProperty |
Identifie la propriété de dépendance FromHorizontalOffset . |
RepeatBehavior |
Obtient ou définit le comportement à répétition de cette chronologie. (Hérité de Timeline) |
SpeedRatio |
Obtient ou définit le taux, par rapport à son parent, auquel le moment progresse pour cette chronologie. (Hérité de Timeline) |
TargetName |
Obtient ou définit le nom de référence de l’élément de contrôle ciblé. |
TargetNameProperty |
Identifie la propriété de dépendance TargetName . |
Méthodes
ClearValue(DependencyProperty) |
Efface la valeur locale d’une propriété de dépendance. (Hérité de DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Retourne toute valeur de base établie pour une propriété de dépendance, qui s’applique dans les cas où une animation n’est pas active. (Hérité de DependencyObject) |
GetValue(DependencyProperty) |
Retourne la valeur effective actuelle d’une propriété de dépendance à partir d’un objet DependencyObject. (Hérité de DependencyObject) |
ReadLocalValue(DependencyProperty) |
Retourne la valeur locale d’une propriété de dépendance, si une valeur locale est définie. (Hérité de DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Inscrit une fonction de notification pour écouter les modifications apportées à un DependencyProperty spécifique sur ce instance DependencyObject. (Hérité de DependencyObject) |
SetValue(DependencyProperty, Object) |
Définit la valeur locale d’une propriété de dépendance sur un DependencyObject. (Hérité de DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Annule une notification de modification précédemment inscrite en appelant RegisterPropertyChangedCallback. (Hérité de DependencyObject) |
Événements
Completed |
Se produit lorsque l’objet Storyboard a terminé la lecture. (Hérité de Timeline) |