SwipeBackThemeAnimation Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt die vorkonfigurierte Animation dar, die auf Steuerelemente angewendet wird, wenn ein Element nach einer Wischinteraktion wieder in seinen Layoutslot gleitet.
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 ... />
- Vererbung
- Attribute
Beispiele
Im folgenden Beispiel wird eine SineEase-Beschleunigungsfunktion auf eine DoubleAnimation angewendet, um eine verzögerte Animation zu erstellen.
<!-- 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);
}
}
}
Hinweise
Beachten Sie, dass das Festlegen der Duration-Eigenschaft keine Auswirkungen auf dieses Objekt hat, da die Dauer vorkonfiguriert ist.
Konstruktoren
SwipeBackThemeAnimation() |
Initialisiert eine neue instance der SwipeBackThemeAnimation-Klasse. |
Eigenschaften
AutoReverse |
Ruft einen Wert ab, der angibt, ob die Zeitachse nach einem vollständigen Durchgang vorwärts in umgekehrter Reihenfolge abspielt. (Geerbt von Timeline) |
BeginTime |
Ruft den Zeitpunkt ab, zu dem diese Zeitachse beginnen soll, oder legt diese fest. (Geerbt von Timeline) |
Dispatcher |
Gibt immer in einer Windows App SDK-App zurück |
DispatcherQueue |
Ruft den |
Duration |
Ruft die Zeitdauer ab, für die diese Zeitachse wiedergegeben wird, ohne Wiederholungen, oder legt diese fest. (Geerbt von Timeline) |
FillBehavior |
Ruft einen Wert ab, der angibt, wie sich die Animation verhält, nachdem sie das Ende ihres aktiven Zeitraums erreicht hat, oder legt diesen fest. (Geerbt von Timeline) |
FromHorizontalOffset |
Ruft den Abstand ab, um den das Ziel in horizontaler Richtung übersetzt wird, wenn die Animation aktiv ist, oder legt diese fest. |
FromHorizontalOffsetProperty |
Identifiziert die Abhängigkeitseigenschaft FromHorizontalOffset . |
FromVerticalOffset |
Ruft den Abstand ab, um den das Ziel in die vertikale Richtung übersetzt wird, wenn die Animation aktiv ist, oder legt diese fest. |
FromVerticalOffsetProperty |
Identifiziert die Abhängigkeitseigenschaft FromHorizontalOffset . |
RepeatBehavior |
Ruft das Wiederholungsverhalten dieser Zeitachse ab oder legt es fest. (Geerbt von Timeline) |
SpeedRatio |
Ruft die Rate relativ zum übergeordneten Element ab, zu dem für diese Zeitachse ein Fortschritt erfolgt, oder legt diese fest. (Geerbt von Timeline) |
TargetName |
Ruft den Verweisnamen des Zielsteuerelements ab oder legt den Verweisnamen fest. |
TargetNameProperty |
Identifiziert die TargetName-Abhängigkeitseigenschaft . |
Methoden
ClearValue(DependencyProperty) |
Löscht den lokalen Wert einer Abhängigkeitseigenschaft. (Geerbt von DependencyObject) |
GetAnimationBaseValue(DependencyProperty) |
Gibt einen beliebigen Basiswert zurück, der für eine Abhängigkeitseigenschaft eingerichtet wurde, der in Fällen gilt, in denen eine Animation nicht aktiv ist. (Geerbt von DependencyObject) |
GetValue(DependencyProperty) |
Gibt den aktuellen effektiven Wert einer Abhängigkeitseigenschaft aus einem DependencyObject zurück. (Geerbt von DependencyObject) |
ReadLocalValue(DependencyProperty) |
Gibt den lokalen Wert einer Abhängigkeitseigenschaft zurück, wenn ein lokaler Wert festgelegt ist. (Geerbt von DependencyObject) |
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback) |
Registriert eine Benachrichtigungsfunktion zum Lauschen auf Änderungen an einer bestimmten DependencyProperty für dieses DependencyObject-instance. (Geerbt von DependencyObject) |
SetValue(DependencyProperty, Object) |
Legt den lokalen Wert einer Abhängigkeitseigenschaft für ein DependencyObject fest. (Geerbt von DependencyObject) |
UnregisterPropertyChangedCallback(DependencyProperty, Int64) |
Bricht eine Änderungsbenachrichtigung ab, die zuvor durch Aufrufen von RegisterPropertyChangedCallback registriert wurde. (Geerbt von DependencyObject) |
Ereignisse
Completed |
Tritt auf, wenn die Wiedergabe des Storyboard-Objekts abgeschlossen wurde. (Geerbt von Timeline) |