WPF - Изменение размера столбцов и строк в сетке - PullRequest
1 голос
/ 18 июля 2010

Хорошо, я использую сетку для отображения различного контента. Как я могу получить определенные столбцы, чтобы изменить размер, в то время как другие остаются неизменными.

То есть форма всплывает с указанием начальных размеров столбцов для элементов управления ... если пользователь изменяет размер формы ... я хочу, чтобы некоторые "памятные" подобные поля расширялись. Как это сделать? Кажется, я могу только увеличить ВСЕ «вторые» столбцы по высоте ... не только 1 (последний) ... или конкретные.

Спасибо за любую помощь !!

Вот макет ... Как я могу сделать так, чтобы «длинный» текст изменял размер с помощью изменения размера формы, и удерживал кнопку приклеенной к нижней части формы ??? ТХ

<DockPanel VerticalAlignment="Top">
    <Grid DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" >
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition MinWidth="150" ></ColumnDefinition>        
      </Grid.ColumnDefinitions>

      <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition MinHeight="80" Height="Auto"></RowDefinition>
        <RowDefinition ></RowDefinition>
      </Grid.RowDefinitions>

      <Label Grid.Column="0" Grid.Row="0" Content="Test1"/>
      <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/>
      <Label Grid.Column="0" Grid.Row="2" Content="Test3"/>

      <TextBox Height="Auto" Grid.Column="1" Grid.Row="0" />
      <TextBox Height="Auto" Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" />
      <TextBox Height="Auto" Grid.Column="1" Grid.Row="2" />

    </Grid>
    <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" MinHeight="20" Margin=" 0,0,10,10">
      <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/>
      <Button Content="Cancel" Width="75" IsCancel="True" />
    </StackPanel>
  </DockPanel>

(добавлено после первого «ответа») Теперь, если я удаляю нижнюю стековую панель (кнопки «ОК», «Отмена») из уравнения, чтобы сделать это проще, и я устанавливаю для 1-й и 2-й строк фиксированное значение ... я, кажется, могу заставить это работать (не хочу чтобы установить максимальную высоту, хотя) ... о, и мне нужно изменить вертикальное выравнивание на "растянуть". Но как только я снова добавляю StackPanel для кнопок ... растяжение больше не работает ... вот следующая пересмотренная версия ...

<DockPanel VerticalAlignment="Stretch">
    <Grid DockPanel.Dock="top"  VerticalAlignment="Stretch" Grid.Column="0"  Margin="10,10,10,10" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition MaxHeight="30"></RowDefinition>
            <RowDefinition MinHeight="80" Height="*"></RowDefinition>
            <RowDefinition MaxHeight="30"></RowDefinition>
        </Grid.RowDefinitions>

        <Label Grid.Column="0" Grid.Row="0" Content="Test1"/>
        <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/>
        <Label Grid.Column="0" Grid.Row="2" Content="Test3"/>

        <TextBox Grid.Column="1" Grid.Row="0" />
        <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" />
        <TextBox Grid.Column="1" Grid.Row="2" />
    </Grid>

    <StackPanel DockPanel.Dock="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,0,10,10">
        <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/>
        <Button Content="Cancel" Width="75" IsCancel="True" />
    </StackPanel>
</DockPanel>

Так что у меня все еще проблемы ...

Ответы [ 3 ]

3 голосов
/ 18 июля 2010

Используйте * для ширины столбца вместо Auto, что говорит столбцу о том, что он должен занимать все пространство, оставшееся после установки других столбцов.

Если вам нужно несколько столбцов для совместного использования доступного пространства в разных процентахВы можете поставить префикс * с числом, как в «2 *» и «3 *».По умолчанию «» означает 1 .

HTH,
Berryl

0 голосов
/ 19 июля 2013

Если вы хотите иметь возможность изменить размер только одного из квадратов, созданных в Определениях строк и столбцов, вы должны добавить сетку или любой другой элемент контейнера внутри одного из квадратов.Затем вы измените размер сетки внутри квадрата соответственно.Таким образом, все Определения не изменят размер, вместо этого будет изменен размер сетки и ее элементов внутри, что не изменит другие элементы.Это не часто, но вы можете иметь как можно больше стековых панелей и сеток и настроить их видимость при необходимости.Иногда, когда что-то не работает, вставляйте их внутрь чего-то другого и экспериментируйте с этим.Вы можете получить это случайно, но вы все равно получите это.

0 голосов
/ 19 июля 2010

Кажется, я могу решить проблемы, только перенеся StackPanel в собственную строку сетки и столбец. Вот мое решение. Не уверен, нужна ли в этом случае панель док-станции ... но без дополнительных действий ... это мое текущее решение. Если кто-нибудь может объяснить мне, как заставить его работать с панелью стека, OK, отмените кнопки «вне» сетки, я хотел бы знать. Между тем, это решение доступно для тех из вас, кто занимается такими проблемами. Как видите, вам нужно использовать Auto во всех других определениях строк. * где вы хотите, чтобы это расширилось.

<DockPanel VerticalAlignment="Stretch">
        <Grid DockPanel.Dock="top"  VerticalAlignment="Stretch" Grid.Column="0"  Margin="10,10,10,10" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition MinHeight="80" Height="*"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>

            <Label Grid.Column="0" Grid.Row="0" Content="Test1"/>
            <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/>
            <Label Grid.Column="0" Grid.Row="2" Content="Test3"/>

            <TextBox Grid.Column="1" Grid.Row="0" />
            <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" />
            <TextBox Grid.Column="1" Grid.Row="2" />

            <StackPanel Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,10,0,0">
                <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/>
                <Button Content="Cancel" Width="75" IsCancel="True" />
            </StackPanel>
        </Grid>
    </DockPanel>
...