Есть ли RowSpan = "All" в WPF? - PullRequest
       2

Есть ли RowSpan = "All" в WPF?

28 голосов
/ 12 января 2011

Я создаю GridSplitter в трех строках, которые есть в моей сетке, например:

<GridSplitter Grid.Row="0" Grid.Column="1" Background="Yellow"
              HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
              Width="Auto" Height="Auto" ResizeDirection="Columns"
              Grid.RowSpan="3" ...

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

Моим первым предположением было Grid.RowSpan="*", но это не компилируется.

Ответы [ 3 ]

33 голосов
/ 12 января 2011

Простое решение:

<!-- RowSpan == Int32.MaxValue -->
<GridSplitter Grid.Row="0"
              Grid.Column="1"
              Grid.RowSpan="2147483647" />
16 голосов
/ 12 января 2011

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

Редактировать: Фактически только частично вручнуюXaml:

<StackPanel Orientation="Vertical">
    <Grid Name="GridThing">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>   
            <ColumnDefinition/>         
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition />
            <RowDefinition />   
            </Grid.RowDefinitions>
            <Grid.Children>
                <Button Content="TopRight" Grid.Row="0" Grid.Column="1"/>
                <Button Content="LowerRight" Grid.Row="1" Grid.Column="1"/>
            <Button Content="Span Rows" Name="BSpan" Grid.RowSpan="{Binding RelativeSource={RelativeSource AncestorType=Grid}, Path=RowDefinitions.Count, Mode=OneWay}"/>
        </Grid.Children>
        </Grid>
    <Button Click="Button_Click" Content="Add Row" />
</StackPanel>

Код:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        GridThing.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(20) });
        foreach (FrameworkElement child in GridThing.Children)
        {
            BindingExpression exp = child.GetBindingExpression(Grid.RowSpanProperty);
            if (exp != null)
            {
                exp.UpdateTarget();
            }
        }
    }
1 голос
/ 12 января 2011

Элемент управления Grid не предоставляет ничего подобного прямо из коробки. Вполне возможно, что вы могли бы реализовать MarkupExtension или какой-то другой трюк, чтобы включить это.

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