Bob*_*Bob 9 c# xaml windows-phone-7
我在这样的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>
Run Code Online (Sandbox Code Playgroud)
在使用应用程序期间,MusicBg的大小会发生变化,有时会变为大约3,000像素宽.
musicBG.Width = _songLength*PixelsPerSecond
Run Code Online (Sandbox Code Playgroud)
但是,在滚动scrollViewer时,它允许我将矩形一直滚动到屏幕上.
例如,当我移动矩形时,这行代码给出了以下值,只要我想移动它.
if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth)
Run Code Online (Sandbox Code Playgroud)
HorizontalOffset的值为~1200,ScrollableWidth的值约为~2900.
如何才能正确完成此操作,以便矩形不会完全滚动屏幕?
我希望大约1200的HorizontalOffset只将矩形推到它的目的地的一半,而不是让它开始离开屏幕.
回答:
经过很多挫折之后,我能够通过使用Canvas而不是Border或Rectangle来解决这个问题.如果有人能够解释为什么会出现这个问题,并且如果处理器密集程度较低的控件比canvas更好,我会给予积分.
编辑:截屏:
坏代码:
<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>
Run Code Online (Sandbox Code Playgroud)
坏代码坏图片:

良好的工作代码:
<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>
Run Code Online (Sandbox Code Playgroud)
好滚动:注意它在右下角显示170秒而不是在坏滚动中的较小数量的118秒.

我相信你是对的,wp7 不会渲染大于 2048 像素的形状。所以它滚动页面的原因是因为它把它视为大于 2048,但你最多只能看到 2048px 的宽度,并且它只是滚动到矩形的“幽灵”部分。
我不确定你是否可以覆盖这个,但我能想出的最好的解决方案(不覆盖)是将你的矩形分割成小于 2000 的卡盘(只是为了安全起见),然后以水平方式无缝显示它们滚动查看器内的堆栈面板。问题在于,根据您的编码方式,该解决方案可能很难实现;但是当显示它时,您可能只能在 ViewModel 中将其拆分,并且您的逻辑只会将其视为一大块。
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |