繁体   English   中英

如何获得一个内部有矩形的ScrollViewer,当它到达矩形的末尾时停止滚动?

[英]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)

Horizo​​ntalOffset的值为~1200,ScrollableWidth的值约为~2900。

如何才能正确完成此操作,以便矩形不会完全滚动屏幕?

我希望大约1200的Horizo​​ntalOffset只将矩形推到它的目的地的一半,而不是让它开始离开屏幕。

回答:

经过很多挫折之后,我能够通过使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM