2010-07-18 2 views
1

Хорошо, я использую сетку для отображения различного контента. Как я могу получить конкретные копии для изменения размера, в то время как другие остаются фиксированными.WPF - изменение размеров столбцов и строк в сетке

То есть, форма всплывает со спецификацией Начальные размеры столбцов для элементов управления ... если пользователь ИЗМЕНЯЕТ ФОРМУ ... Я хочу, чтобы определенные поля «напоминания» расширялись. Как это сделать? Кажется, я могу только получить ВСЕ «второй» столбцы для расширения по высоте ... не только 1 (последний) ... или конкретные.

Спасибо за помощь!

Вот макет ... как я могу сделать «длинный» текст изменяемым по размеру с изменением размера формы и удерживать кнопку приклеенной к нижней части формы ??? ТХ

<DockPanel VerticalAlignment="Top"> 
    <Grid DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition MinWidth="150" ></ColumnDefinition>   
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition MinHeight="80" Height="Auto"></RowDefinition> 
     <RowDefinition ></RowDefinition> 
     </Grid.RowDefinitions> 

     <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
     <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
     <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

     <TextBox Height="Auto" Grid.Column="1" Grid.Row="0" /> 
     <TextBox Height="Auto" Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
     <TextBox Height="Auto" Grid.Column="1" Grid.Row="2" /> 

    </Grid> 
    <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" MinHeight="20" Margin=" 0,0,10,10"> 
     <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
     <Button Content="Cancel" Width="75" IsCancel="True" /> 
    </StackPanel> 
    </DockPanel> 

(добавлено после 1 «ответ») Теперь, если я удалить нижнюю StackPanel (Ok, Cancel кнопки) из уравнения, чтобы сделать это проще и я установить 1-й и 2-й строки на фиксированное значение ... я, кажется, могу получить эту работу (не хочу, чтобы установить максимальную высоту, хотя) ... о, и мне нужно изменить verticalAlignment на «растянуть». Но как только я добавить StackPanel для кнопок снова ... растягивание больше работает не ... так вот следующий пересмотренный вариант ...

<DockPanel VerticalAlignment="Stretch"> 
    <Grid DockPanel.Dock="top" VerticalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition MaxHeight="30"></RowDefinition> 
      <RowDefinition MinHeight="80" Height="*"></RowDefinition> 
      <RowDefinition MaxHeight="30"></RowDefinition> 
     </Grid.RowDefinitions> 

     <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
     <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
     <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

     <TextBox Grid.Column="1" Grid.Row="0" /> 
     <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
     <TextBox Grid.Column="1" Grid.Row="2" /> 
    </Grid> 

    <StackPanel DockPanel.Dock="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,0,10,10"> 
     <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
     <Button Content="Cancel" Width="75" IsCancel="True" /> 
    </StackPanel> 
</DockPanel> 

Так что я по-прежнему возникают проблемы ...

ответ

3

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

Если вам нужно несколько столбцов, чтобы разделить доступное пространство в разных процентах, вы можете префикс * с номером, как в «2 *» и «3 *». По умолчанию «» означает 1.

НТН,
Berryl

+0

Привет, спасибо, что ответили. Проблема заключается в том, как указать высоту изменения размера NO для всех строк, за исключением определенного. * поддерживается только для определения столбцов и определения строки, так как вы можете получить поперечное сечение? 2-й ряд, 2-й столб, чтобы действовать именно так. Как показано в примере, нижние кнопки не приклеиваются к нижней части, а последняя строка, последний столбец не изменяется. замена авто на «*» не помогает. – appWoW

+0

Я пересмотрел пример кода выше ... но все еще имею проблемы. – appWoW

+0

Hi appWow. Я немного потерял то, что вы пытаетесь сделать здесь. Указание изменения размера NO, кроме одного, означает, что одна строка и только одна строка имеют Height = "*". Это отличается от калибровки отдельных ячеек в сетке - лучший способ сделать это - вложить одну сетку внутри другой и использовать размер звезды на этой ячейке (2-я строка, 2-й пол.) Ширина = «*». HTH – Berryl

0

я, кажется, только в состоянии решить проблемы, incorporting в StackPanel в отдельной строке сетки, и столбцов. Вот мое решение. Не уверен, что в этом случае необходима док-панель ... но без лишних усилий ... это мое текущее решение. Если кто-нибудь может объяснить мне, как заставить его работать с панелью стека ОК, отмените кнопки «вне» сетки, я бы хотел узнать. Между тем, это решение доступно для тех из вас, кто ищет такую ​​проблему. Как вы видите, вам нужно использовать Auto во всех других определениях строк. * где u хочет, чтобы он расширялся.

<DockPanel VerticalAlignment="Stretch"> 
     <Grid DockPanel.Dock="top" VerticalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"></ColumnDefinition> 
       <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition MinHeight="80" Height="*"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
       <RowDefinition Height="Auto"></RowDefinition> 
      </Grid.RowDefinitions> 

      <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
      <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
      <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

      <TextBox Grid.Column="1" Grid.Row="0" /> 
      <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
      <TextBox Grid.Column="1" Grid.Row="2" /> 

      <StackPanel Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,10,0,0"> 
       <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
       <Button Content="Cancel" Width="75" IsCancel="True" /> 
      </StackPanel> 
     </Grid> 
    </DockPanel> 
+0

DockPanel делает то, что вы хотите (вроде), потому что по умолчанию LastChildFill = "true". Ваш StackPanel является последним ребенком. Идея в том, что у вас есть одна панель (сетка), вложенная внутри другой (DockPanel). Если вам нужен более тонкий элемент управления, какой вам кажется, то измените DockPAnel на сетку. НТН – Berryl

0

Если вы хотите, чтобы иметь возможность изменить размер только один из квадратов, сделанных строк и столбцов определений следует добавить сетку или какой элемент контейнера внутри одного из квадратов. Затем вы создадите сетку внутри квадратного размера. Таким образом, все определения не будут изменяться, вместо этого сетка и ее элементы внутри будут изменяться и, следовательно, не будут изменять другие элементы. Это не распространено, но вы можете иметь столько панелей и сеток стека и устанавливать их видимость, когда это необходимо. Иногда, когда что-то не работает, вставляйте их в нечто другое и экспериментируйте с ним. Вы можете просто получить его случайно, но вы все равно получите его.

Смежные вопросы