Bazen bir şeye yaklaşık 3.000 piksel genişliği için, uygulamada MusicBg değişikliklerin büyüklüğünün kullanımı sırasında buDikdörtgenin sonuna ulaştığında kaydırma işlemini durdurmak için bir Dikdörtgen İçeren ScrollViewer'ı nasıl alabilirim?
<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>
gibi ScrollViewer içinde bir Dikdörtgen oluşturduk. ScrollViewer kaydırma yaparken
musicBG.Width = _songLength*PixelsPerSecond
Ancak, benim tüm yol ekranın dışına dikdörtgen kaydırmak için izin verir.
Örneğin bu kod satırı, dikdörtgeni taşımak istediğim yere taşıdığımda aşağıdaki değerleri verir.
if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth)
HorizontalOffset ~ 1200 arasında bir değere sahiptir ve scrollableWidth yaklaşık ~ 2900 arasında bir değere sahiptir.
Dikdörtgenin tamamen ekrandan kaydırılmaması için bu işlemin düzgün yapılmasını nasıl sağlayabilirim?
Yaklaşık 1200 piksellik bir HorizontalOffset öğesinin, dikdörtgeni yalnızca hedefin yarısına doğru itmesi ve ekrandan çıkmaya başlaması için beklenmez.
CEVAP:
çok hayal kırıklığı sonra ben Tuval yerine Sınır veya Dikdörtgen kullanarak bu sorunu çözmek başardı. Herkes bu sorunun neden olduğunu açıklayabilirse ve tuvalden daha iyi çalışacak daha az işlemci yoğun kontrol varsa, puan vereceğim.
Düzenleme: Ekran görüntüleri:
Kötü Kodu:
İyi çalışma kodu:
<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>
İyi kötü kod ile kötü kaydırma
<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>
Görüntü Kaydırma: 170 sn diyor Kötü kaydırmada 118 saniye yerine sağ alt kısma koyar.
Görselleştirmeye yardımcı olmak için tanımladığınızın ekran görüntüsünü atmak istiyorsanız, başarmaya çalıştığınız şeyden emin olabilirim, o zaman evet, bulunduğunuz nesnelerden herhangi birini kullanabilmeniz gerekir. zaten çalışıyor ancak ScrollViewer'ın ViewPort'una bir boyut bağlamanız gerekebilir ve hatta bir ofset gerektirmeyebilir. Şu anda açıklamanızın görselleştirilmesi zor olsa da, eminim ki bunu çözebiliriz. –
@ChrisW. Soru güncellendi. – Bob
Bu çok garip, dikdörtgen 2000'den sonra büyüyene kadar mükemmel çalışıyor ve sonuna kadar ilerlediğinizde ekranı daha da ileriye doğru itmeye başlıyor. Merakımı yakaladınız .... – methodMan