Как сохранить высоту и ширину ячейки сетки одинаковыми - PullRequest
6 голосов
/ 07 мая 2011

Мне нужно сохранить Grid высота ячейки = ширина при изменении размера.

Рабочий код с использованием viewBox:

  <Viewbox>
        <Grid>
            <Grid.RowDefinitions>
                    <RowDefinition Height="1*"/>
                    <RowDefinition Height="1*"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <Label Grid.Row="0" Grid.Column="0" Background="Black" Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"></Label>
                <Label Grid.Row="1" Grid.Column="0" Background="Gray" Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"></Label>
                <Label Grid.Row="0" Grid.Column="1" Background="Gray" Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"></Label>
                <Label Grid.Row="1" Grid.Column="1" Background="Black" Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"></Label>
            </Grid>
        </Viewbox>

Благодарю H.B. за идею использовать viewBox! :)

Ответы [ 3 ]

9 голосов
/ 08 мая 2011

«Правильный» способ сделать это, вероятно, использовать функции общего размера элемента управления Grid, но это, к сожалению, предотвращает растяжение всей сетки. например,

<Grid Grid.IsSharedSizeScope="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition SharedSizeGroup="A"/>
        <ColumnDefinition SharedSizeGroup="A"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition SharedSizeGroup="A"/>
        <RowDefinition SharedSizeGroup="A"/>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" Grid.Column="0" Background="Red"   Content="Lorem"/>
    <Label Grid.Row="1" Grid.Column="0" Background="White" Content="Lorem ipsum"/>
    <Label Grid.Row="0" Grid.Column="1" Background="White" Content="Lorem ipsum dolor"/>
    <Label Grid.Row="1" Grid.Column="1" Background="Red"   Content="Lorem ipsum dolor sit"/>
</Grid>

Можно поместить это в Viewbox, но поведение изменения размера этого, вероятно, не то, что вы хотите, так как оно масштабирует содержимое. Возможно, вы сможете найти способ сделать это полезным в вашем контексте.

5 голосов
/ 07 мая 2011

WPF предоставляет UniformGrid - это может оказаться более полезным для того, что вы пытаетесь сделать. Вот статья, которая демонстрирует это: http://www.c -sharpcorner.com / UploadFile / yougerthen / 308222008124636PM / 3.aspx

Чтобы все было в порядке, просто свяжите свойство сетки Width со своим собственным свойством ActualHeight:

Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"
1 голос
/ 07 мая 2011

Я думаю, что вы должны использовать UniformGrid вместо этого, или вы можете попробовать что-то вроде:

<Grid ShowGridLines="True" x:Name="grid" >
  <Grid.RowDefinitions>
    <RowDefinition Height="100" />
    <RowDefinition Height="50" />
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="{Binding ElementName=grid, Path=RowDefinitions[0].Height}" />
    <ColumnDefinition Width="{Binding ElementName=grid, Path=RowDefinitions[1].Height}" />
  </Grid.ColumnDefinitions>
</Grid>
...