2011-01-08 1 views
5

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

<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> 

ответ

1

Move 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

AWESOME !! Это работает отлично! Спасибо!! – Dan

+0

@ Dan: Вы могли бы отметить в своем вопросе, что вам не нужен столбец сетки для фактического размера, как и ожидалось, с этим решением все элементы в столбце будут растягиваться до 450, а не только в поле группы. –

0

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

<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> 
+0

Благодарности H.B. для ответа. Похоже, что когда окно сокращается, групповой ящик не уклоняется. Я не играл с триггерами, поэтому я собираюсь пойти в этом направлении, но спасибо за ответ! – Dan

+0

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

2

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

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

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

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

<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> 
Смежные вопросы