[英]How do I wrap ListView and GridView inside ScrollViewer without breaking scrollViewer scrolling
[英]How do I get a ScrollViewer with a Rectangle inside to stop scrolling when it reaches the end of the rectangle?
我在这样的ScrollViewer中创建了一个Rectangle
<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>
在使用应用程序期间,MusicBg的大小会发生变化,有时会变为大约3,000像素宽。
musicBG.Width = _songLength*PixelsPerSecond
但是,在滚动scrollViewer时,它允许我将矩形一直滚动到屏幕上。
例如,当我移动矩形时,这行代码给出了以下值,只要我想移动它。
if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth)
HorizontalOffset的值为~1200,ScrollableWidth的值约为~2900。
如何才能正确完成此操作,以便矩形不会完全滚动屏幕?
我希望大约1200的HorizontalOffset只将矩形推到它的目的地的一半,而不是让它开始离开屏幕。
回答:
经过很多挫折之后,我能够通过使用Canvas而不是Border或Rectangle来解决这个问题。 如果有人能够解释为什么会出现这个问题,并且如果处理器密集度较低的控件可以比画布更好地工作,我会给予积分。
编辑:截屏:
坏代码:
<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>
坏代码坏图片:
良好的工作代码:
<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>
好滚动:注意它在右下角显示170秒而不是在坏滚动中的较小数量的118秒。
我相信你的权利,wp7将不会渲染大于2048像素的形状。 所以它滚动页面的原因是因为它将它视为比2048更大,但你只能看到2048px的宽度,它只是滚动到矩形的“鬼”部分。
我不确定你是否可以覆盖它,但我能想出的最好的解决方案(没有覆盖)是将你的矩形分成小于2000的夹头(只是为了安全),然后在水平方向无缝地显示它们滚动查看器内的堆栈面板。 问题在于,根据您的编码方式,这个解决方案可能很难实现; 但是你可能只能在显示它时在ViewModel中拆分它,你的逻辑只会把它看作一个大块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.