2011-10-26 42 views
0

我在我的wpf應用程序中遇到了一個有趣的問題。ScrollViewer中的面板

我正在使用mvvm,並且項目由綁定到視圖模型的內容控件組成。

例如:

<Shell> 
    <ScrollViewer> 
    <StackPanel> 
     <ContentControl Content="{Bidning SomeVM}"/> 
     <ContentControl Content="{Bidning SomeVM2}"/> 
     <ContentControl Content="{Bidning SomeVM3}"/> 
    </StackPanel> 
    </ScrollViewer> 

</Shell> 

如果堆棧面板只拿到一個項目,它工作正常,但由於某些原因,每個視圖(解決形式VM)需要更多的空間(高度)超過其實際需要。

視圖中包含一個GroupBox和一個DataGrid,如果它是重要的。

所以這是我的問題,有什麼建議嗎?

+0

您是否嘗試刪除堆疊面板? – sll

+0

sll:然後呢?我不能把不止一個孩子.. –

回答

1

StackPanel將在Orientation的方向上測量它的Infinity兒童,默認爲Vertical。因此,您的物品將以無限高度進行測量,這意味着他們將根據內容進行尺寸調整 - 例如, DataGrid將爲列表中的每個項目分配,測量和排列記錄(假定控件上沒有設置約束)。還要注意,它們不會因爲依賴於特定約束而被測量而導致虛擬化。

請注意,即使您使用了不同的面板,您也可能會得到此行爲,因爲ScrollViewer中的ScrollContentPresenter會測量其無限大的子元素(如果它正在執行滾動操作) - 如果CanContentScroll設置爲false, ItemsPanel不實現IScrollInfo。

我不確定你想要達到什麼樣的佈局,所以很難提供任何具體的建議。

+0

我使用滾動查看器進行縮放,我希望這三個內容填充可見的屏幕大小,當縮放滾動時應該進入操作並且酒吧可見。 –

+0

當DataGrid等可能有滾動條時,你如何看待這種工作?所以爲了清楚你想要三個控件都有三分之一的窗口高度。所以當你縮放時,你希望這些控件仍然被測量/排列,就好像它們是高度的三分之一一樣,但是要使用rendertransform等來放大每個內容的內容? – AndrewS

+0

是的,你明白 –