Ho creato un rettangolo all'interno di uno ScrollViewer come questoCome si ottiene un ScrollViewer con un rettangolo all'interno per interrompere lo scorrimento quando raggiunge la fine del rettangolo?
<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Center" Width="728" Canvas.Top="20" d:LayoutOverrides="HorizontalMargin" >
<Rectangle x:Name="musicBG" Fill="#FF0692FD"/>
</ScrollViewer>
Durante l'utilizzo delle app, la dimensione dei cambiamenti MusicBg, a volte a qualcosa di circa 3000 pixel di larghezza.
musicBG.Width = _songLength*PixelsPerSecond
Tuttavia, durante lo scorrimento ScrollViewer, mi permette di scorrere il rettangolo tutta la strada fuori dallo schermo.
Ad esempio questa riga di codice mi fornisce i seguenti valori quando ho spostato il rettangolo fino a dove voglio spostarlo.
if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth)
HorizontalOffset ha un valore di circa 1200 e ScrollableWidth ha un valore di circa ~ 2900.
Come posso fare in modo che ciò avvenga correttamente in modo che il rettangolo non scenda completamente dallo schermo?
Mi aspetterei un HorizontalOffset di circa 1200 per spingere il rettangolo solo a metà strada verso la sua destinazione, e non farlo partire dallo schermo.
RISPOSTA:
Dopo molta frustrazione, sono stato in grado di risolvere questo problema utilizzando Canvas posto di frontiera o un rettangolo. Assegnerò punti se qualcuno può spiegare perché questo problema si è verificato e se c'è un controllo meno intensivo del processore che funzionerebbe meglio del canvas.
Edit: colpi di schermo:
Bad Codice:
<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left" >
<Border x:Name="musicBG" Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" />
</ScrollViewer>
Immagine di cattivo scorrimento con codice cattivo:
Buono codice di lavoro:
<ScrollViewer ManipulationMode="Control" x:Name="songScrollViewer" Width="720" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Disabled" Height="270" VerticalAlignment="Top" Canvas.Top="20" HorizontalAlignment="Left" >
<Canvas x:Name="musicBG" Background ="#FF0692FD" Height="270" >
<Border Background="#FF0692FD" VerticalAlignment="Top" HorizontalAlignment="Left" Height="270" />
</Canvas>
</ScrollViewer>
Buono Scorrere: Notare che dice 170 se conds in basso a destra invece del minor numero di 118 secondi nella cattiva scroll.
Se vuoi proiettare una schermata di ciò che stai descrivendo per aiutarti a visualizzarlo, così posso essere certo di ciò che stai cercando di ottenere, quindi sì, dovresti essere in grado di utilizzare qualsiasi oggetto che eri già provando, ma potrebbe essere necessario associare una dimensione al ViewPort di ScrollViewer e potrebbe anche non essere necessario un offset. Attualmente anche se è difficile visualizzare dalla tua descrizione, ma sono sicuro che possiamo risolverlo. –
@ Chrishr. Domanda aggiornata. – Bob
Questo è molto strano, funziona perfettamente fino a quando il rettangolo diventa più grande del 2000 e poi inizia a spingerlo sempre più lontano dallo schermo quando si scorre fino alla fine. Hai colto la mia curiosità .... – methodMan