2012-02-08 68 views
3

我正在創建一個UI的過程中,這是中心組件是一個scrollviewer持有一個可變數目的項目的stackpanel。如果屏幕上沒有足夠的空間,則左側和右側的按鈕似乎允許使用滾動查看器單擊堆棧面板。請注意,這些項目都是相同的大小。動態調整scrollviewer的寬度

<Grid.ColumnDefinitions> 
    <ColumnDefinition x:Name="LeftButton" Width="Auto"/> 
    <ColumnDefinition x:Name="Content" Width="*"/> 
    <ColumnDefinition x:Name="RightButton" Width="Auto"/> 
</Grid.ColumnDefinitions> 

這工作正常。但是,我現在只需要顯示完整/完整的項目。因此,如果在StackPanel中有更多的項目,我可以在屏幕上顯示,我不想顯示右側或左側的部分項目。我只想讓我的滾動按鈕出現,表明有更多的項目可用。 所以,如果一個孩子被添加到堆疊面板中,則持有堆疊面板的滾動查看器應該查看屏幕上是否有足夠的空間來顯示所有項目。如果不是,它應該減小其寬度,以便隱藏下一個(部分可見的)項目。

我的問題是:什麼是確定是否可以在屏幕上顯示堆棧面板中的所有項目的最佳方法。如果沒有,我怎麼能隱藏部分項目可能顯示?

我已經玩過了滾動查看器本身的寬度,依靠SizeChanged事件,但我不確定這是否是實現此行爲最明智的方法。在初始化時確定滾動查看器的MaxWidth是否更好?是否相應地設置並讓它增長?

由於提前, 好奇心

+0

實現此目標更復雜的一個問題是,一旦設置了滾動查看器,就無法更改其寬度。如果我嘗試,它將不會顯示。 – curiosity 2012-02-08 10:24:08

回答

1

我認爲既然這是這樣一個自定義的滾動瀏覽器,那麼你並不需要在所有使用默認的ScrollViewer,而是使用自己控制的基礎上的StackPanel是將顯示這些項目。你甚至可以實現一個動畫,這樣當按下左或右按鈕時,它會以很好的方式滾動。

+0

這確實值得一想。也許我只是拋棄了scrollview。我喜歡動畫的想法。然而,目前看來,我們可能不得不在物品上繪製東西,這些東西不會包含在物品中,而是繪製在物品所在屏幕上的位置上。我不確定在項目和繪製在其上的附加層之間同步動畫的可能性有多大。 – curiosity 2012-02-08 14:08:43