2013-06-30 9 views
1

我有一個內部有幾個項目的網格,並不是所有的都可見:有些被摺疊。 WPF有一個簡單的方法來在新項目顯示時調整網格中已經顯示的項目的大小?如何使用具有可摺疊項目的網格行和列?

其實我的需求比這個更簡單:我只有2件東西必須垂直疊放。大多數時候只有一個可見,但當第二個出現時,我需要第一個調整大小到網格大小的2/3,第二個放置在填充剩餘位置的下方:1/3。

enter image description here

我覺得我與Grid.Row屬性(和可能與Grid.RowSpan)玩,但我不知道如何達到預期的行爲,而不在代碼隱藏搞亂它。

我試過的是混合自動尺寸與LastChildFill屬性DockPanel沒有成功。

回答

1

你可以嘗試這樣的:

<Grid Background="Green"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*" /> 
    <RowDefinition> 
     <RowDefinition.Style> 
     <Style TargetType="{x:Type RowDefinition}"> 
      <Setter Property="Height" 
        Value="0.25*" /> 
      <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=secondRect, 
              Path=Visibility}" 
          Value="Collapsed"> 
       <Setter Property="Height" 
         Value="0" /> 
      </DataTrigger> 
      </Style.Triggers> 
     </Style> 
     </RowDefinition.Style> 
    </RowDefinition> 
    </Grid.RowDefinitions> 
    <!-- Row 1 --> 
    <Rectangle Grid.Row="0" 
       Fill="Blue" /> 
    <!-- Row 2 --> 
    <Rectangle x:Name="secondRect" 
       Grid.Row="1" 
       Fill="Tomato" /> 
</Grid> 

所以你在第二網格行設置Style.Trigger,以檢查其中是否包含元素是Collapsed如果是這樣設置它的高度爲「0」,如果不是「0.25 *」,而Grid第1行有它的Height作爲*或「所有剩餘空間」,這將配合這種罰款。

備選:

您可以用Grid.RowSpan做得一樣好喜歡你所提到的。

<Grid Background="Green"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="0.75*" /> 
    <RowDefinition Height="0.25*" /> 
    </Grid.RowDefinitions> 
    <!-- Row 1 --> 
    <Rectangle Grid.Row="0" 
       Fill="Blue"> 
    <Rectangle.Style> 
     <Style TargetType="{x:Type Rectangle}"> 
     <Setter Property="Grid.RowSpan" 
       Value="1" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=secondRect, 
              Path=Visibility}" 
         Value="Collapsed"> 
      <Setter Property="Grid.RowSpan" 
        Value="2" /> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
    </Rectangle> 
    <!-- Row 2 --> 
    <Rectangle x:Name="secondRect" 
       Grid.Row="1" 
       Fill="Tomato" 
       Visibility="Collapsed" /> 
</Grid> 

現在,你有第1'行的「元素」的TriggerGrid.RowDefinition,當你發現第二行的元素變成Collapsed切換的第一個的行跨度爲2否則它停留在1

+0

您爲我打開了一個新的領域:直接在XAML中修改樣式和屬性。非常感謝你。 – Sturm

相關問題