2014-03-19 41 views
0

請各位看看下面我的代碼:上面的代碼的RowDefinition Height =自動不起作用?

<Border Background="#242328" CornerRadius="10" Opacity="0.9"> 
    <Grid Width="400"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="80"/> 
     </Grid.RowDefinitions> 
     <TextBlock Text="{Binding [someViewModel].Title}" Margin="0,20,0,20"/> 

     <StackPanel Grid.Row="1" Orientation="Vertical"> 
      <TextBlock Margin="20,0,0,0" Text="{Binding [someViewModel].AnotherText}"/> 
     </StackPanel> 

     <StackPanel Grid.Row="2" Orientation="Vertical"> 
      <Image Source="{Binding [someViewModel].source}" Width="100" Height="100"/> 
      <TextBlock Margin="20,0,0,0" Text="{Binding [someViewModel].AnotherText2}"/> 
     </StackPanel> 

     <Grid Grid.Row="3" Width="250" Margin="0,10,10,10"> 
      <Button Width="120" Height="50" Background="#638699" Content="OK" FontSize="18"/> 
     </Grid> 
    </Grid> 
</Border> 

輸出:

enter image description here

現在我的問題很簡單,爲什麼會出現在按鈕上方空的空間?我已經設置了所有的RowDefinition Height="Auto",當我的變量中沒有任何值時,框不應該縮小到只剩下按鈕嗎?

請注意,所有的變量如 [someViewModel] .title僞,[someViewModel] .AnotherText,[someViewModel] .AnotherText2,[someViewModel] .Source將是無效

回答

4

看一看你的設計師你會看到這樣的事情

Designer

你的TextBlock和StackPanels將呈現,如果他們有一個值與否並不重要。如果你想在他們沒有價值的時候隱藏他們,你可以使用IValueConverter來根據他們的內容來確定他們的可見性。

+0

如果是這種情況,使用RowDefinition Height =「Auto」是什麼意思?' –

+1

它會根據行內容的大小來設置行高。如果內容的大小在運行時發生變化,那麼行的大小也會變化。而你的控制仍然存在。如果他們有價值或沒有價值就沒關係。就像我所說的:如果你不想展示它們,你必須將可見性設置爲摺疊狀態。一個好的方法是使用轉換器。 –

0

Auto大小的行中的某些控件的高度> 0,即使它們不顯示任何內容。這會導致計算的行高也大於0.

例如,您的TextBlock上的Margin會導致計算高度。 另外,Image控制高度設置爲100,無論您是否分配源。