Как свернуть RowDefinition? - PullRequest
8 голосов
/ 13 октября 2011

Мне нужно удалить пространство, занимаемое сеткой. Ряд.Я могу свернуть (удалить) элемент управления, который я поместил в Grid.Row, но, поскольку RowDefinition имеет фиксированный размер (высоту), даже после удаления дочернего элемента управления я все еще вижу пустую строку.

Есть лиспособ свернуть RowDefinition / Grid.Row?

Спасибо за ваш интерес.

Ответы [ 6 ]

8 голосов
/ 13 октября 2011

Вы могли установить RowDefinition.Height="Auto" и могли бы назначить фиксированную высоту фактическому визуалу в этой строке. Таким образом, когда визуал сжимается визуально, строка не занимает фиксированную ширину, которая была назначена определению строки.

5 голосов
/ 05 февраля 2012

Настройка RowDefinition.Height ="Auto" подходит не для всех случаев, так как часто мы хотим * размер наших строк.

Вместо того, чтобы динамически / программно добавлять и удалять строки из списка, проще и безопаснее растянуть содержимое первых строк на следующую строку / с.

Это можно сделать с помощью DataTrigger, чтобы установить Grid.RowSpan для первого элемента в сетке. Ниже приведен полный пример - просто вставьте его в новое окно WPF, чтобы увидеть его в действии.

  <Grid>
        <Grid.Resources>

            <BooleanToVisibilityConverter x:Key="visConverter"></BooleanToVisibilityConverter>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <Grid Grid.Row="0" Background="Orange">
            <Grid.Style>
                <Style TargetType="Grid">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=toggle1, Path=IsChecked}" Value="False">
                            <Setter Property="Grid.RowSpan" Value="3"></Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Grid.Style>
        </Grid>
        <GridSplitter Grid.Row="1" ResizeBehavior="PreviousAndNext" HorizontalAlignment="Stretch" Height="3" 
                      Visibility="{Binding ElementName=toggle1, Path=IsChecked, Converter={StaticResource visConverter}}"></GridSplitter>
        <Grid Name="bottomGrid" Grid.Row="2" Background="LightBlue" 
              Visibility="{Binding ElementName=toggle1, Path=IsChecked, Converter={StaticResource visConverter}}">
        </Grid>
        <ToggleButton Name="toggle1" VerticalAlignment="Top">Hide/Show</ToggleButton>
</Grid>
2 голосов
/ 29 июня 2018

Совершенно нормально применять стиль с триггерами к RowDefinition для строки, которую вы хотите свернуть.Это может помочь, если у вас есть звездные значения для ваших высот.

Следующее может быть полезно, если вы хотите скрыть раздел результатов до того, как результаты будут получены (например, с нулевым счетом ObservableCollection), например.

<RowDefinition>
    <RowDefinition.Style>
        <Style>
            <Setter Property="RowDefinition.Height" Value="2*"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Results.Count}" Value="0">
                    <Setter Property="RowDefinition.Height" Value="0"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </RowDefinition.Style>
</RowDefinition>
1 голос
/ 25 октября 2016

Установите Name для вашей сетки в первую очередь. Сначала установите высоту строки с помощью атрибута XAML:

<Grid Name="GridSize">
     <Grid.RowDefinitions>
        <RowDefinition Height="3*"></RowDefinition>
        <RowDefinition Height="1*"></RowDefinition>
        <RowDefinition Height="2*"></RowDefinition>
     </Grid.RowDefinitions>
     <Grid Name="A" Grid.Row="0""></Grid>
     <Grid Name="B" Grid.Row="1""></Grid>
     <Grid Name="C" Grid.Row="2""></Grid>
</Grid>

Когда вы хотите свернуть RowDefinition:

A.Visibility = Visibility.Collapsed;
GridSize.RowDefinitions[0].Height = new GridLength(0);

Если вы хотите сделать его снова видимым:

A.Visibility = Visibility.Visible;
GridSize.RowDefinitions[0].Height = new GridLength(3, GridUnitType.Star);
1 голос
/ 13 октября 2011

Вы можете увидеть здесь пример манипулирования строками и столбцами в сетке. Хотя документация предназначена для .Net (WPF), она по-прежнему актуальна для WP7 / Silverlight.

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

0 голосов
/ 10 июля 2019

Простое решение (используйте высоту, на которую вы знаете, что ваши элементы управления расширятся):

<RowDefinition MaxHeight="30"/>

Затем убедитесь, что все элементы управления в этой строке будут использовать Visibilitty="Collapsed"

Этоработал для меня, поскольку мне нужно было только установить флаг Collapse / Visible только один раз, не знаю, как это будет работать, если вы хотите переключать видимость во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...