2012-06-20 68 views
9

我創建了一個矩形的ScrollViewer內這樣如何獲取帶有矩形的ScrollViewer以在其到達矩形的末端時停止滾動?

<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的大小而變化的,有時東西約3000像素寬度。

musicBG.Width = _songLength*PixelsPerSecond 

然而,當滾動的ScrollViewer,它讓我滾動矩形屏幕一路掉。

例如,這行代碼給我下面的值時,我已經就我想移動它移動的矩形。

if (songScrollViewer.HorizontalOffset > songScrollViewer.ScrollableWidth) 

Horizo​​ntalOffset的值爲〜1200,而ScrollableWidth的值約爲2900。

如何我能得到這個正確完成,使得矩形被關閉屏幕滾動完全?

我預計約1200 Horizo​​ntalOffset只能通過到它的目的地推大約一半的矩形,並不能使它啓動會關閉屏幕。

答:

太多的無奈之後,我能夠通過使用Canvas而不是邊界或矩形來解決這個問題。 我會獎勵分,如果任何人都可以解釋爲什麼這個問題會發生,如果有少處理器密集型的控制,將工作比帆布更好。

編輯:屏幕截圖:

糟糕的代碼: bad scroll

良好的工作代碼:

<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> 

<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> 

壞滾動帶惡意代碼的圖片滾動:注意它說170 se conds在右下角,而不是在壞的滾動中118秒的較小數字。 good scroll

+0

如果你想拋出一個屏幕狂漲你描述以幫助觀察它,所以我可以肯定的你想怎麼完成那麼是的,你應該可以使用任何你是對象的什麼已經嘗試過,但你可能必須將大小綁定到ScrollViewer的ViewPort,甚至可能不需要偏移量。目前雖然很難從描述中形象化,但我相信我們可以將其整理出來。 –

+0

@ChrisW。問題已更新。 – Bob

+1

這是非常奇怪的,它完美的作品,直到矩形變大然後2000,然後它開始越走越推關閉屏幕時,您滾動到最後。你已經吸引了我的好奇心...... – methodMan

回答

1

我相信您的權利,WP7將不會使那些更大然後2048個像素的形狀。所以,它的滾動頁面的原因是因爲它是把它當作好像它是更大然後2048,但你只能看到高達2048像素的寬度和它只是滾動到矩形的「鬼」的一部分。

我不知道你是否可以重寫這個,但我可以想出的最佳解決方案是(無需重寫)將矩形分成小於2000的卡盤(爲了安全起見),然後顯示它們無縫地位於滾動查看器內部的水平堆棧面板中。問題在於,根據你編碼的方式,這個解決方案可能很難實現;但是當顯示它時,你可能只能將它分解到ViewModel中,而你的邏輯只會將它看作一個大塊。