Как сделать, чтобы один элемент управления расширялся/заполнялся до максимальной высоты, а затем расширял/заполнял другой элемент управления в WPF?

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

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

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Name="Screen_1_Name"   
    x:Class="TestExpansionScreens.Screen_1"
    Width="400" Height="400">

    <Grid x:Name="LayoutRoot" Background="White" Margin="0,0,0,0">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <GroupBox Header="Thing1" Background="LightGreen" Grid.Row="0" Grid.Column="0" MaxHeight="350">
            <Button Content="Stuff1"  />
        </GroupBox>

        <GroupBox Header="Thing2" Background="LightBlue" Grid.Row="1" Grid.Column="0">
            <TextBox Text="Stuff2" Height="60" />
        </GroupBox>

        <GroupBox Header="Thing3" Background="Pink" Grid.Row="2" Grid.Column="0">           
            <TextBox Text="Stuff3"  />          
        </GroupBox>
    </Grid>
</UserControl>

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

Спасибо


person whatsisname    schedule 24.01.2013    source источник
comment
Попробуйте привязать высоты к конвертеру. stackoverflow.com/questions/9083933/   -  person paparazzo    schedule 25.01.2013


Ответы (1)


Вы должны установить MaxHeight в своем первом RowDefinition, а не в GroupBox. Строка вырастет до этой высоты, а затем все лишнее пространство будет занято третьей строкой. Вы также можете добавить MinHeight в третью строку.

    <Grid x:Name="LayoutRoot" Background="White" Margin="0,0,0,0">
        <Grid.RowDefinitions>
            <RowDefinition MaxHeight="350" />
            <RowDefinition Height="Auto"/>
            <RowDefinition MinHeight="150" />
        </Grid.RowDefinitions>

        <GroupBox Header="Thing1" Background="LightGreen" Grid.Row="0" Grid.Column="0">
            <Button Content="Stuff1"  />
        </GroupBox>

        <GroupBox Header="Thing2" Background="LightBlue" Grid.Row="1" Grid.Column="0">
            <TextBox Text="Stuff2" Height="60" />
        </GroupBox>

        <GroupBox Header="Thing3" Background="Pink" Grid.Row="2" Grid.Column="0">
            <TextBox Text="Stuff3"  />
        </GroupBox>
    </Grid>
person bouvierr    schedule 25.01.2013