Qualcuno può spiegare il significato di manipulation modes come TranslateX
, TranslateRailsX
, TranslateInertia
? Che cos'è un rail mode
? E di quale inerzia stanno parlando?ManipulationMode spiegato
risposta
Con rotaie - quando il processore di input rileva se la manipolazione è prevalentemente verticale o prevalentemente orizzontale, si attacca al rispettivo asse quando si riportano valori delta/cumulativi di traslazione. Altrimenti, consente semplicemente di manipolare liberamente qualsiasi cosa tu stia manipolando. I flag delle rotaie devono essere usati in combinazione con i flag non-rail, quindi solo TranslateRailsX
non funziona. Hai bisogno di entrambi e TranslateX
per ottenere qualcosa.
Il flag TranslateInertia
consente di gestire facilmente i flicker o le rotazioni/le scale inerziali in caso di altri flag di inerzia. Fondamentalmente se aggiungi questo flag allo TranslateX
per esempio e fai un gesto rapido, continuerai a ricevere gli eventi di input (ManipulationDelta
) per un po 'anche dopo che il gesto è stato completato. Si ottiene anche l'evento ManipulationInertiaStarting
quando si sfiora una volta terminato il flusso di input, in modo da poter controllare fino a che punto il colpo va se lo si desidera. È possibile controllare my extensions sull'argomento di quell'evento in WinRT XAML Toolkit per ottenere un maggiore controllo sulla balistica del colpo.
tuo ManipulationDeltaEventArgs
avere una proprietà IsIntertial
si può anche utilizzare per controllare se gli eventi che si stanno ottenendo sono direttamente da eventi di input o il risultato di un film e anche chiamare Complete()
se per qualche motivo non si vuole continuare a ricevere la eventi delta per il film.
Se avete bisogno sia di TranslateRailsX che di TranslateX, come mai il msdn doc dice: "Non combinare i valori di Translate * con i valori di TranslateRails *, questi sono trattati come valori mutuamente esclusivi"? https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.uielement.manipulationmode – user362178
Ecco un semplice esempio che mostra come ho implementato TranslateRailsX/Y.
Volevo che si registrasse solo lo scorrimento orizzontale ma usando solo TranslateX/Y si stava sollevando verso sinistra o verso destra anche se stavo scorrendo verso l'alto o verso il basso.
Quindi, solo un semplice XAML e, come nel mio caso, desidero solo i salti orizzontali, non i salti verticali.
file XAML:
<Grid Background="WhiteSmoke">
<WebView Name="webview" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
xaml.cs di file:
int x1;
int x2;
int y1;
int y2;
public MainPage()
{
this.InitializeComponent();
webview.ManipulationMode = ManipulationModes.TranslateRailsX | ManipulationModes.TranslateRailsY;
webview.ManipulationStarted += (s, e) => x1 = (int)e.Position.X;
webview.ManipulationStarted += (s, e) => y1 = (int)e.Position.Y;
webview.ManipulationCompleted += (s, e) =>
{
x2 = (int)e.Position.X;
y2 = (int)e.Position.Y;
System.Diagnostics.Debug.WriteLine(x1);
System.Diagnostics.Debug.WriteLine(x2);
System.Diagnostics.Debug.WriteLine(y1);
System.Diagnostics.Debug.WriteLine(y2);
if (x1 > x2)
{
System.Diagnostics.Debug.WriteLine("right");
};
if (x1 < x2)
{
System.Diagnostics.Debug.WriteLine("left");
}
};
E ora ottengo il seguente su un colpo verticale
x1 180
x2 180
y1 201
y2 386
e scorrere orizzontale
x1 89
x2 293
y1 371
y2 371
left or right
Spero che questo aiuti qualcuno nella stessa situazione.
Penso che l'API sia solo in WinRT/XAML e non in WPF, quindi ho rimosso il tag WPF dalla domanda e aggiunto il runtime di Windows uno per chiarezza. –