Проблема с размером сетки в WPF - PullRequest
1 голос
/ 19 января 2011

Вот моя проблема.У меня есть три элемента управления подряд (они захватывают имена людей).Сами элементы управления измеряют себя до соответствующего размера.Я хочу расположить эти три элемента управления горизонтально, чтобы они были равномерно распределены вдоль линии.Этот бит прост:

<Grid>
  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="*" />
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition />
  </Grid.RowDefinitions>
  <Border Grid.Row="0" Grid.Column="0" BorderThickness="2" Height="50" Width="50" />
  <Border Grid.Row="0" Grid.Column="1" BorderThickness="2" Height="50" Width="50" />
  <Border Grid.Row="0" Grid.Column="2" BorderThickness="2" Height="50" Width="50" />
</Grid>

Проблема возникает, когда я хочу скрыть вторую запись.Если бы я установил его видимость свернутым, я бы хотел, чтобы два оставшихся элемента были расположены на одинаковом расстоянии.Этого не происходит, средний столбец остается на 1/3 ширины сетки.

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

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

Ответы [ 3 ]

0 голосов
/ 19 января 2011

Вместо настройки видимости установите для ширины ColumnDefinition значение 0

. Предположим, имя сетки - grid1, затем

grid1.ColumnDefinitions[1].Width = new GridLength(0);
.
0 голосов
/ 24 января 2011

Вот так я и решил проблему.

  <Grid>   
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="*" />
      <ColumnDefinition Width="{Binding IsVisible, Converter={StaticResource collapsed2auto}}"/>
      <ColumnDefinition Width="*" />  
   </Grid.ColumnDefinitions>   
   <Grid.RowDefinitions>    
     <RowDefinition />   
   </Grid.RowDefinitions>   
   <Border Grid.Row="0" Grid.Column="0" BorderThickness="2" Height="50" Width="50" />   
   <Border Grid.Row="0" Grid.Column="1" BorderThickness="2" Height="50" Width="50" Visibility="{Binding Path=IsVisible}"/>   
   <Border Grid.Row="0" Grid.Column="2" BorderThickness="2" Height="50" Width="50" /> 
  </Grid> 

Это похоже на наименее хакерское решение.в основном, он принимает то же свойство, которое используется для отключения элемента управления, преобразует его в «*» или «auto» через преобразователь и присваивает его определению столбца.Кажется, работает.

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

0 голосов
/ 19 января 2011

У вас все еще возникает та же проблема, если вы измените все 3:

<ColumnDefinition Width="Auto" />

Для справки: http://msdn.microsoft.com/en-us/library/system.windows.controls.columndefinition.width%28VS.96%29.aspx

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