简单的<grid> with 2 Columns&amp; 2个对象</grid>

时间:2014-04-10 16:10:47

标签: c# wpf silverlight xaml

你有一个包含2个对象的简单网格,每列一个:

<Grid>
   <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition />
   </Grid.ColumnDefinitions>

   <Rectangle Fill="Blue" Grid.Column="0" />
   <Rectangle Fill="Red" Grid.Column="1" />

</Grid>

我想要什么:设置&#34;可见性=倒塌&#34;无论是红色还是蓝色矩形,另一个占据了所有剩余的空间。

我可以使用网格控件吗?

由于

2 个答案:

答案 0 :(得分:3)

使用StackPanelDockPanel等其他面板可以轻松实现这一目标。

但是如果您只对网格方法感兴趣,可以使用DataTrigger查看其他矩形是Collapsed,然后将Grid.ColumnSpan设置为2可见矩形

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Rectangle Fill="Blue" Grid.Column="0" x:Name="blueRectangle">
        <Rectangle.Style>
            <Style TargetType="Rectangle">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Visibility,
                                ElementName=redRectangle}" Value="Collapsed">
                        <Setter Property="Grid.ColumnSpan" Value="2"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
    </Rectangle>
    <Rectangle Fill="Red" Grid.Column="1" x:Name="redRectangle">
        <Rectangle.Style>
            <Style TargetType="Rectangle">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Visibility, 
                                 ElementName=blueRectangle}" Value="Collapsed">
                        <Setter Property="Grid.ColumnSpan" Value="2"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
    </Rectangle>
</Grid>

答案 1 :(得分:0)

我知道这是一个便宜的技巧,但确实有效:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <Rectangle Fill="Red" Grid.Column="0" />
    <Rectangle Fill="Blue" Grid.Column="1" />

    <Rectangle Fill="Blue" Grid.Column="0" />
    <Rectangle Fill="Red" Grid.Column="1" />
</Grid>