Ich habe innerhalb eines Scroll wie dieseWie bekomme ich einen ScrollViewer mit einem Rechteck nach innen, um den Bildlauf zu stoppen, wenn das Ende des Rechtecks erreicht ist?
<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>
Bei der Nutzung der App, die eine Größe von MusicBg Veränderungen, die manchmal etwas rund 3.000 Pixel Breite ein Rechteck erstellt.
musicBG.Width = _songLength*PixelsPerSecond
Beim Scrollen des ScrollViewers kann ich das Rechteck jedoch vollständig vom Bildschirm abrollen.
Zum Beispiel gibt mir diese Codezeile die folgenden Werte, wenn ich das Rechteck so weit verschoben habe, wie ich es verschieben möchte.
if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth)
Horizontal hat einen Wert von ~ 1200 und ScrollableWidth hat einen Wert von etwa ~ 2900.
Wie kann ich das richtig machen, damit das Rechteck nicht vollständig vom Bildschirm gescrollt wird?
Ich würde erwarten, dass ein HorizontalOffset von etwa 1200 das Rechteck nur etwa auf halbem Weg zum Ziel verschiebt und es nicht vom Bildschirm verschwinden lässt.
ANTWORT:
Nach viel Frustration, ich war in der Lage, dieses Problem zu lösen, indem Leinwand anstelle von Border oder Rechteck. Ich werde Punkte vergeben, wenn jemand erklären kann, warum dieses Problem aufgetreten ist, und ob es eine weniger prozessorintensive Steuerung gibt, die besser funktioniert als die Arbeitsfläche.
Edit: Screenshots:
Bad Code:
<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>
Bild von schlechten Blättern mit schlechten Code:
Gute Arbeitscode:
<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>
Gut Scroll: Beachten Sie, dass es 170 Se sagt Conds unten rechts statt der kleineren Zahl von 118 Sekunden in der schlechten Scroll.
Wenn Sie einen Screenshot von dem, was Sie beschreiben, werfen möchten, um es zu visualisieren, damit ich sicher sein kann, was Sie erreichen möchten, dann ja, sollten Sie in der Lage sein, eines der Objekte zu verwenden bereits versucht, aber Sie müssen möglicherweise eine Größe an den ViewPort des ScrollViewer binden und möglicherweise nicht einmal einen Offset benötigen. Derzeit ist es schwierig, anhand Ihrer Beschreibung zu visualisieren, aber ich bin mir sicher, dass wir das Problem lösen können. –
@ChrisW. Frage aktualisiert – Bob
Das ist sehr seltsam, es funktioniert perfekt, bis das Rechteck größer als 2000 wird und dann beginnt, es weiter und weiter vom Bildschirm zu schieben, wenn Sie bis zum Ende scrollen. Sie haben meine Neugierde geweckt ... – methodMan