2012-08-30 100 views
1

這有點難以解釋,但我會盡我所能。 我目前有一個兩列和幾行的網格。 我只希望第二列中的控件貢獻網格的高度。對其容器尺寸沒有貢獻的控件

所以,在下面的例子中,我希望列表框是兩個文本塊的高度,並顯示一個滾動條,如果它需要顯示更多的數據。我在如何做到這一點上畫空白。

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="2*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <ListBox Grid.RowSpan="2" Grid.Column="0" VerticalAlignment="Stretch" /> 

    <TextBlock Grid.Row="0" Grid.Column="1" /> 
    <TextBlock Grid.Row="1" Grid.Column="1" /> 
</Grid> 
+0

您是否嘗試過這樣做呢?滾動視圖沒有預定義的大小,所以我希望網格符合第二列中控件的大小。 – mydogisbox

+0

你可能不想使用列,因爲我不認爲你可以自動調整它們的大小,而不用程序代碼來篡改它。您可能想要使用網格內的網格或堆疊面板。我不能說如果不知道要求,你應該怎麼做 - 你期望有多少個列表框,只有1個?你期望有多少文本塊,只有2個?或者你有每個複合材料項目1列表框和2個文本塊,你必須堆疊行中的項目? –

+0

@mydogisbox - 我已經試過了,並沒有爲我工作。 –

回答

2

如果你不介意的話討厭的黑客:

<FrameworkElement Grid.RowSpan="2" Grid.Column="0" Name="Hax" /> 
<ListBox Grid.RowSpan="2" Grid.Column="0" 
     Height="{Binding ActualHeight, ElementName=Hax}"/> 
+0

是的,我知道我可以做到這一點,它確實有效。但是,正如你所提到的,它並不是最漂亮的事情。我希望有更好的東西。 –

+0

@BryanWatts:如何分別重寫'Measure'和'Arrange'來實現控件? –

+0

我認爲你是對的@ H.B。可能是唯一干淨的方式來做到這一點。 – BStateham

1

它現在看起來像網格正在延伸填補IT的父母。嘗試外網的高度,以汽車,VerticalAlignment設置爲最高:

<Grid Height="Auto" VerticalAlignment="Top"> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*" /> 
    <ColumnDefinition Width="2*" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <ListBox Grid.RowSpan="2" Grid.Column="0" VerticalAlignment="Stretch" /> 

    <TextBlock Grid.Row="0" Grid.Column="1" /> 
    <TextBlock Grid.Row="1" Grid.Column="1" /> 
</Grid> 
+0

這應該不會改變任何東西,ListBox仍然支配高度。 –

+0

真的,Grid的VerticalAlignment可以是除Stretch之外的任何東西。 – BStateham

+0

這不能解決我的問題。我同意@ H.B,它不會改變這個事實,即如果ListBox增長,那麼網格將會增長。 –