Как закрепить групповую коробку слева, но позволить групповой коробке увеличиться до максимальной ширины при растяжении - PullRequest
5 голосов
/ 08 января 2011

Недавно я пытался помочь своему другу с проблемой макета WPF, и я не могу понять, как заставить его работать, и это кажется такой простой вещью, поэтому я подумал, что смогу использовать богатство знанийздесь :) Он хочет, чтобы groupbox1 автоматически изменял размер до значения maxwidth, а затем оставался привязанным слева, в то время как пространство справа от groupbox увеличивается.Так что для простоты я просто собираюсь опубликовать пример кода ситуации сейчас :) Если у кого-то есть возможность пролить свет на ситуацию, пожалуйста, ответьте.Спасибо всем!

<Window x:Class="GroupBoxTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="147" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="151*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="148" />
        <ColumnDefinition Width="355*" />
    </Grid.ColumnDefinitions>
    <GroupBox Header="groupBox1" Margin="14,12,41,8" Name="groupBox1" MaxWidth="450" Grid.Column="1">
        <Grid />
    </GroupBox>
    <GroupBox Header="groupBox2" Margin="12,12,13,8" Name="groupBox2">
        <Grid />
    </GroupBox>
</Grid>

Ответы [ 3 ]

2 голосов
/ 08 января 2011

Установка MaxWidth="450" в ColumnDefinition будет работать для GroupBox.

<ColumnDefinition Width="355*" MaxWidth="450"/>

Если другие элементы в столбце 1 должны растягиваться дальше 450, то вы можете установить HorizontalAlignment="Left" для GroupBox и связать Width с другим элементом в том же столбце.

ActualWidth для ColumnDefinition не является свойством зависимости, в противном случае мы могли бы использовать его в качестве источника для привязки

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="151*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="148" />
        <ColumnDefinition Width="355*" />
    </Grid.ColumnDefinitions>
    <Rectangle Name="sizeElement" Fill="Transparent" Margin="14,12,41,8" Grid.Column="1"/>
    <GroupBox Header="groupBox1" Margin="14,12,41,8" Name="groupBox1" MaxWidth="450" Grid.Column="1"
              HorizontalAlignment="Left"
              Width="{Binding ElementName=sizeElement, Path=ActualWidth}">
        <Grid />
    </GroupBox>
    <GroupBox Header="groupBox2" Margin="12,12,13,8" Name="groupBox2">
        <Grid />
    </GroupBox>
</Grid>
1 голос
/ 08 января 2011

Переместите MaxWidth = "450" ​​в ColumnDefinition и удалите его из GroupBox.

<Grid>
    <Grid.RowDefinitions>
       <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
       <ColumnDefinition Width="148" />
       <ColumnDefinition Width="*" MaxWidth="450" />
    </Grid.ColumnDefinitions>
    <GroupBox 
        Name="groupBox1" 
        Header="groupBox1"
        Margin="14,12,41,8"
        Grid.Column="1">
    </GroupBox>
    <GroupBox Header="groupBox2" Margin="12,12,13,8" Name="groupBox2">
    </GroupBox>
</Grid>
0 голосов
/ 08 января 2011

Вы можете создать обходной путь, используя такой стиль:

<GroupBox Header="groupBox1" Margin="14,12,41,8" Name="groupBox1" MaxWidth="450" Grid.Column="1">
    <GroupBox.Style>
        <Style TargetType="GroupBox">
             <Style.Triggers>
                <Trigger Property="ActualWidth" Value="450">
                        <Setter Property="Width" Value="450"/>
                        <Setter Property="HorizontalAlignment" Value="Left"/>   
                    </Trigger>       
                 </Style.Triggers>
            </Style>    
        </GroupBox.Style>
    <Grid />
</GroupBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...