WPF参考网格列的宽度

时间:2015-06-03 13:13:01

标签: wpf xaml

是否有比我发现的更优雅的方式来引用网格列的宽度来构建嵌入式网格?我不能以更好的方式访问某个网格列的实际宽度吗?我是否也可以使用双向连接,这样如果子网格中的列太宽,则父级中的列会增长以适应内容?

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>  
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="0.5*" />
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="0.5*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="26" />
        <RowDefinition Height="26" />
    </Grid.RowDefinitions>

    <Label Grid.Row="0" Grid.Column="0" x:Name="col0" Content="This"/>
    <Label Grid.Row="0" Grid.Column="1" x:Name="col1" Content="is"/>
    <Label Grid.Row="0" Grid.Column="2" x:Name="col2" Content="a"/>
    <Label Grid.Row="0" Grid.Column="3" x:Name="col3" Content="test."/>

    <Grid Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2">
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=col0}" />
          <ColumnDefinition Width="{Binding Path=ActualWidth, ElementName=col1}" />     
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
          <RowDefinition />
        </Grid.RowDefinitions>

        <Label Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" Content="The" />
        <Label Grid.Row="0" Grid.Column="1" VerticalAlignment="Center" Content="same width" />                  
      </Grid>

  </Grid>
</Page>

1 个答案:

答案 0 :(得分:0)

Grid控件支持多个&#34;相同大小&#34;允许您指定Grid中的列或行应该都具有相同大小的属性,而无需担心这些大小是什么。

要使用它,请将IsSharedSizeScope附加属性添加到Grid控件:

<Grid Name="Root" Grid.IsSharedSizeScope="True">
    . . .
</Grid>

然后,在您希望大小相同的列上,指定SharedSizeGroup属性的名称:

<Grid Name="Root" Grid.IsSharedSizeScope="True">
    <Grid Name="InnerGrid1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
        </Grid.ColumnDefinitions>
        . . .
    </Grid>

    <Grid Name="InnerGrid2>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column1" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="Auto" SharedSizeGroup="Column2" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="5" />
        </Grid.ColumnDefinitions>
        . . .
    </Grid>
</Grid>

在此示例中,两个不同的Grids中有两个不同的列,它们的大小始终相同。