SwipeBackThemeAnimation Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta l'animazione preconfigurata che si applica ai controlli quando un elemento torna nello slot di layout dopo un'interazione Di scorrimento rapido .
public ref class SwipeBackThemeAnimation sealed : Timeline
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 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.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class SwipeBackThemeAnimation final : Timeline
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class SwipeBackThemeAnimation : Timeline
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class SwipeBackThemeAnimation : Timeline
Public NotInheritable Class SwipeBackThemeAnimation
Inherits Timeline
<SwipeBackThemeAnimation ... />
- Ereditarietà
- Attributi
Requisiti Windows
Famiglia di dispositivi |
Windows 10 (è stato introdotto in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)
|
Esempio
L'esempio seguente applica una funzione di interpolazione SineEase a un DoubleAnimation per creare un'animazione decelerante.
<!-- 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);
}
}
}
Commenti
Si noti che l'impostazione della proprietà Duration non ha alcun effetto su questo oggetto poiché la durata è preconfigurata.
Costruttori
SwipeBackThemeAnimation() |
Inizializza una nuova istanza della classe SwipeBackThemeAnimation . |
Proprietà
AutoReverse |
Ottiene o imposta un valore che indica se la sequenza temporale viene riprodotta in senso inverso dopo il completamento di un'iterazione in avanti. (Ereditato da Timeline) |
BeginTime |
Ottiene o imposta l'ora in cui deve iniziare questa sequenza temporale . (Ereditato da Timeline) |
Dispatcher |
Ottiene CoreDispatcher associato a questo oggetto. CoreDispatcher rappresenta una struttura che può accedere a DependencyObject nel thread dell'interfaccia utente anche se il codice viene avviato da un thread non interfaccia utente. (Ereditato da DependencyObject) |
Duration |
Ottiene o imposta la durata di riproduzione di questa sequenza temporale, senza contare le ripetizioni. (Ereditato da Timeline) |
FillBehavior |
Ottiene o imposta un valore che specifica il comportamento dell'animazione dopo che raggiunge la fine del periodo attivo. (Ereditato da Timeline) |
FromHorizontalOffset |
Ottiene o imposta la distanza in base alla quale la destinazione viene tradotta nella direzione orizzontale quando l'animazione è attiva. |
FromHorizontalOffsetProperty |
Identifica la proprietà di dipendenza FromHorizontalOffset . |
FromVerticalOffset |
Ottiene o imposta la distanza in base alla quale la destinazione viene tradotta nella direzione verticale quando l'animazione è attiva. |
FromVerticalOffsetProperty |
Identifica la proprietà di dipendenza FromHorizontalOffset . |
RepeatBehavior |
Ottiene o imposta il comportamento di ripetizione della sequenza temporale. (Ereditato da Timeline) |
SpeedRatio |
Ottiene o imposta la frequenza, rispetto al relativo elemento padre, in cui viene eseguito lo stato di avanzamento per questa sequenza temporale. (Ereditato da Timeline) |
TargetName |
Ottiene o imposta il nome di riferimento dell'elemento di controllo di destinazione. |
TargetNameProperty |
Identifica la proprietà di dipendenza TargetName . |
Metodi
ClearValue(DependencyProperty) |
Cancella il valore locale di una proprietà di dipendenza. (Ereditato da DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Restituisce qualsiasi valore di base stabilito per una proprietà di dipendenza, che si applica nei casi in cui un'animazione non è attiva. (Ereditato da DependencyObject) |
GetValue(DependencyProperty) |
Restituisce il valore effettivo corrente di una proprietà di dipendenza da un oggetto DependencyObject. (Ereditato da DependencyObject) |
ReadLocalValue(DependencyProperty) |
Restituisce il valore locale di una proprietà di dipendenza, se viene impostato un valore locale. (Ereditato da DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registra una funzione di notifica per l'ascolto delle modifiche a un'istanza di DependencyObject specifica. (Ereditato da DependencyObject) |
SetValue(DependencyProperty, Object) |
Imposta il valore locale di una proprietà di dipendenza in un oggetto DependencyObject. (Ereditato da DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Annulla una notifica di modifica registrata in precedenza chiamando RegisterPropertyChangedCallback. (Ereditato da DependencyObject) |
Eventi
Completed |
Si verifica al termine della riproduzione dell'oggetto Storyboard . (Ereditato da Timeline) |