2013-09-10 43 views
1

我有一個使用SizeToContent="WidthAndHeight"一個窗口,我在它有三行一列。行定義如下:WPF漿紗Grid.Row內容

<Grid.RowDefinitions> 
    <RowDefinition /> 
    <RowDefinition /> 
    <RowDefinition /> 
</Grid.RowDefinitions> 

內容由上一行中的一個其他Grid面板組成。每個面板都包含一個標籤和一個ListBox。列表框動態添加或刪除其內容。所以,它可能有一個項目,或者它可能有100個項目。

我的問題是這樣的:當我的應用程序啓動時,上述三行的大小,以在其中的內容。所以它看起來很整齊。如果第一行僅包含ListBox中的一個項目,則它將調整它的大小以適應這些項目。另外兩行(如果內容溢滿)將其餘的空間分成兩半,並且如果用戶想要看到每一行中的溢出,則使其滾動條可見。然而,當我重新大小的主窗口中,三行將立即重新大小自己,每個人會是完全一樣的高度,在他們的內容,無論金額。

我試圖使用在外部電網的行定義Height="Auto";但是,這會使每行的大小精確地適合內容,從而導致它們從屏幕溢出,而無需啓用滾動條。

我想盡我所知道的設置(重點:知道的),我沒能解決它。現在我擺脫SizeToContent,使得怪異的錯誤不會發生,但行的大小成正比,對方無論是在他們的內容量......我想它的其他方式。我不希望每行都有一個靜態高度,而是讓他們動態地重新調整自己的大小,並根據其中的內容數量而不必關閉屏幕。

有沒有辦法解決這個問題?

回答

1

要做對,您必須製作自己的自定義Panel,該尺寸分佈比標準Grid更智能。這個項目可能是一個很好的起點:ConstrainingStackPanel

+0

這是一個夢幻般的鏈接。這很像我想要完成的事情。它包含可用空間內的所有內容。非常感謝! –

1

在XAML中,你可以綁定到一個屬性在您的視圖模型

<Grid.RowDefinitions> 
    <RowDefinition Height="{Binding Row1Height}"/> 
    <RowDefinition Height="{Binding Row2Height}"/> 
    <RowDefinition Height="{Binding Row3Height}"/> 
</Grid.RowDefinitions> 

然後在您的視圖模型

public int Row1Height { get; set; } 
public int Row2Height { get; set; } 
public int Row3Height { get; set; } 

,並有一些計算,一旦你有內容填充該值。

+0

似乎是個好主意。就計算而言,有很多工作要做,但我還沒有發現任何可以實現這一點的工作。 –

0

假設我正確地理解你的問題,你有沒有試過包裹它的ScrollViewer內並轉動scollbar斷爲ListView?

我發現,在WPF佈局呈現既可以是一個積極的和柺杖。在涉及內容大小調整時,讓它正確運行有時會讓人感到痛苦。

如果ScrollViewer不是您想要的方法,您可以通過編寫某種附加行爲(我曾經這樣做過)來輕鬆完成這樣的事情,但在這種情況下,它的方式有點矯枉過正。的ScrollViewer辦法

例子:

<Grid> 
    <ScrollViewer> 
     <ListView ItemsSource="{Binding Something}" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
    : 
    : 
    : 
    </ScrollViewer> 
</Grid> 
+0

我試過這種方法;但是,如果我將它們全部添加到ScrollViewer,那麼我將同時滾動瀏覽所有三個。問題在於,如果第一個有很多內容,另外兩個將會在某個屏幕之外。我希望所有三個在同一時間可見。如果每個包裝到ScrollViewer中,那麼結果與我以前發生的結果類似。 –

+0

我看到...如果我是你,我可能會看看寫一個附加的行爲來處理自動調整。這將完全控制尺寸到你的手中。 我不幸沒有足夠的資金坐下來,現在就這樣做。我知道這是可行的。 – tronious