我在这样的 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 秒。